[Java] Meerdere variabelen uit 1 method halen

Pagina: 1
Acties:

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Topicstarter
Ik heb een class met daarin de private strings username en password. Deze wil ik via een modal JDialog aan de user vragen. Bij voorkeur wil ik natuurlijk een
code:
1
 getUserAndPass(String username, String password);

uitvoeren om deze 2 in 1 keer te krijgen. Helaas, een dergelijke aanroep geeft de addressen van de variabelen username en password mee en die kan je in een methode niet veranderen. Bovendien zijn strings immutable.

Een oplossing is het creeren van een functie die String[2] als terugkeertype heeft en die twee dan weer afzonderlijk aan de variabelen username en password toewijzen. Nogal omslachtig. Op internet vind ik voornamelijk voorbeelden waarin men een aparte methode voor het laten zien van een Dialog heeft, die True returned als er een user/pass combo is ingevuld (en er op "OK" gedrukt is) en dan een aparte
code:
1
2
this.username = <dialogname>.getUserName();
this.password = <dialogname>.getpassword();

wat ook nogal omslachtig is.

Is er nu echt geen nettere methode?

Wie trösten wir uns, die Mörder aller Mörder?


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je zou opzich een object terug kunnen sturen met 2 string velden, of zoals jij al hebt gezegd een array (vind ik erg lelijk omdat je namelijk niet compile time kan zien hoe lang die array is.. en zoals Martin Fowler het leuk weet te verwoorden, zeg ik ook.. dit stinkt :) )

Ik heb persoonlijk niets tegen het feit dat je 2 methodes hebt bij een dialoog die of een username terug sturen, of een password. Ik zou zelf ook voor deze aanpak gaan.

Verder zie ik dat jij een object hebt, die een Password dialoog aanroept? Als dit object een model object is, dan is er iets ernstigs aan de hand met je code, omdat je daar view objecten inzet. Als dit geen model object is, dan is er waarschijnlijk ook iets aan de hand met je code, want dit soort info (password, loginname) hoort in een model thuis.

tip:
ik zie dat je ook gebruik maakt van this. Kijk eens naar de volgende code.
code:
1
2
3
4
5
6
7
public class Persoon{
    private String _voornaam;
    
    public Persoon(String voornaam){
      _voornaam = voornaam;
    }
}

Doordat je gebruik maakt van een '_' prefix kan je goed zien wat een methode argument is, en wat een member variable is. Ik gebruik op dit moment 's_' voor statics en 'G_' voor type variablen (generics).

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Topicstarter
Alarmnummer schreef:
Verder zie ik dat jij een object hebt, die een Password dialoog aanroept?
Het loginDialog waar het JPasswordField inzit wordt bij het opstarten aangeroepen vanuit main en, mocht het overgeslagen zijn, later wanneer de informatie echt nodig is en blijkt te missen. In beide gevallen is de procedure:
ik heb een class loginDialog met een JPasswordField. Wanneer de "OK" button geklikt wordt gaat de inhoud van het passwordveld naar de private static String password (static omdat ik ze uitlees nadat de dialog instantie al een .dispose heeft gekregen), die ik vervolgens uitlees met de public methode getPassword, waarbij de private static variabele password (in de loginDialog class dus) door de getPassword methode gewist wordt.
Als dit object een model object is, dan is er iets ernstigs aan de hand met je code, omdat je daar view objecten inzet. Als dit geen model object is, dan is er waarschijnlijk ook iets aan de hand met je code, want dit soort info (password, loginname) hoort in een model thuis.
Wat bedoel je met 'een model object' as opposed to 'een view object'? De eerst bevat daadwerkelijk data, terwijl de tweede slechts methoden voor het gebruiken van deze data heeft?
Ik modelleer voornamelijk op gezond verstand en wat basiskennis, omdat deze applicaties toch niet zo groot zijn en nooit zullen worden. Door voldoende commentaar blijft het onderhoudbaar voor anderen :)
tip:
ik zie dat je ook gebruik maakt van this. Kijk eens naar de volgende code.
[..]
Doordat je gebruik maakt van een '_' prefix kan je goed zien wat een methode argument is, en wat een member variable is. Ik gebruik op dit moment 's_' voor statics en 'G_' voor type variablen (generics).
Waarom geef je hier de voorkeur aan boven het gebruik van this? (ik zie er wel voordelen aan, maar misschien zie ik ze niet allemaal :))

Wie trösten wir uns, die Mörder aller Mörder?


  • Hydra
  • Registratie: September 2000
  • Laatst online: 26-04 10:16
Op woensdag 24 juli 2002 14:25 schreef Fused het volgende:
wat ook nogal omslachtig is.

Is er nu echt geen nettere methode?
Hoezo is dat omslachtig? Je vraagt van een object 2 attributen op. Dit is IMHO de enige nette methode.

https://niels.nu


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Topicstarter
Hydra schreef:
Hoezo is dat omslachtig? Je vraagt van een object 2 attributen op. Dit is IMHO de enige nette methode.
Twee zodanig gerelateerde objecten moet je in 1 keer kunnen opvragen vind ik. In bijvoorbeeld Delphi kan je dan gewoon de bewuste variabelen als 'var' aan de methode meegeven, waardoor ze automatisch de gewenste waarde krijgen. Nu is Java daar geen voorstander van (terecht), maar een eenvoudig oplossing moet bestaan. Die bestaat ook wel; zoals Alarmnummer al ongeveer aangaf: een 'Persoon'-object maken en die gebruiken in plaats van twee losse strings.

Wie trösten wir uns, die Mörder aller Mörder?


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 24 juli 2002 16:27 schreef Fused het volgende:
Het loginDialog waar het JPasswordField inzit wordt bij het opstarten aangeroepen vanuit main en, mocht het overgeslagen zijn, later wanneer de informatie echt nodig is en blijkt te missen. In beide gevallen is de procedure:
ik heb een class loginDialog met een JPasswordField. Wanneer de "OK" button geklikt wordt gaat de inhoud van het passwordveld naar de private static String password (static omdat ik ze uitlees nadat de dialog instantie al een .dispose
heeft gekregen)
Als jij nog een referentie naar die dialog hebt, dan kan je hem gerust uitlezen hoor. De gc die mag pas collecten als dat object niet meer te bereiken is, en daar is dus geen sprake van als je een referentie aanhoud.

PasswordDialog pd = new PasswordDialog();
pd.setVisible(true);
//object komt niet voor garbage collection in aanmerking.
//omdat pd er nog naar refereerd.
String password = pd.getPassword();
String loginName = pd.getLoginName();
Wat bedoel je met 'een model object' as opposed to 'een view object'?
Ik probeer altijd de logica en data van mijn systeem gescheiden te houden van grafische objecten zoals Dialogs enzo.
De eerst bevat daadwerkelijk data, terwijl de tweede slechts methoden voor het gebruiken van deze data heeft?
Ik modelleer voornamelijk op gezond verstand en wat basiskennis, omdat deze applicaties toch niet zo groot zijn en nooit zullen worden. Door voldoende commentaar blijft het onderhoudbaar voor anderen :)
Een beetje ad hoc programmeren ;)
Waarom geef je hier de voorkeur aan boven het gebruik van this? (ik zie er wel voordelen aan, maar misschien zie ik ze niet allemaal :))
Omdat je meteen kan zien of je een member variable, statische variable of een lokale variable hebt. Je code is dus informatiever.
Pagina: 1