Hallo,
ich habe eine Klasse(Bean), in der ich verschiedene Variablen setzen muss. Diese Variablen müssen alle auf den selben Wertebereich getestet werden.
Momentan sieht das vereinfacht so aus:
Java:
publicclassMyClass{privateboolean success=true;privatefinalint FOO =123;privateint fdo;privateint fbu;// es folgen diverse weitere private int.../**
* testet den Wertebereich eines Farbwertes
* @param col
* @return true, wenn Wertebereich passt, sonst false
*/privatebooleancheckColorVal(int col){if((col<0)||(col>FOO)){returnfalse;}else{returntrue;}}/**
* Setter für fbu
* @param fbu
*/publicvoidsetFbu(int fbu){if(this.checkColorVal(fbu)){this.fbu = fbu;}else{this.success=false;}}/**
* Setter für fdo
* @param fdo
*/publicvoidsetFdo(int fdo){if(this.checkColorVal(fdo)){this.fdo = fdo;}else{this.success=false;}}}
Ich hab mir jetzt gedacht, dass man die Setter eigentlich zusammenfassen könnte. Mir schwebt etwas in der Art wie
vor. Dazu müsste ich die Variablen by reference übergeben - wobei die leider primitive sind und ich annehme, dass mit hier die Verwendung von Integer statt int nicht weiter helfen dürfte...
solange nach aussen hin du die noetigen setters getrennt haelst find ichs ok. Intern die private anzubieten, die dir duplicated code erspart ist an sich eine gute idee.
ist nonsense... warum brauchst du colVar 2x ? [c]colVar=colVar[/c] bringt gar nix - aber das hast du schon selbst gesehen....
nein Integer wuerde dir auch nix bringen. Auch dass deine Methode unterschiedliche Wege geht (mal wird das int gesetzt, mal ein boolean) ist nicht hilfreich.
somit seh ich erstmal keine moegliche verbesserung hier (jdf nicht eine die sinnvoll ist)
Das ist nichts schlimmes. Du kannst deine IDE die Getter und Setter automatisch erzeugen lassen, ganz wie du willst (Code-Templates). Unschön finde ich hier, dass einfach nur ein Flag gesetzt wird, wenn die Parameterprüfung fehl schlägt. Wie wär's mit IllegalArgumentException?
solche "optimierungen" sind der tod fuer deine API. wie gesagt - was du intern fuer dich machst ist deine sache.
Wenn du wirklich eine Klasse hast die 6 oder 7 setter braucht, so braucht sie das. Ueberleg eher ob du alle setter brauchst oder ob deine Struktur richtig ist. Ein solches Monster in einen Schafspelz von nur 2 Methoden zu verstecken ist nur eine verschleierung und keine loesung
Die Klasse soll letztendlich alle übergebenen Variablen auf ihre Wertebereiche testen. Wenn auch nur ein Test fehlschlägt kann ich eh nicht weiter arbeiten und muss darauf reagieren.
Unter anderem werde da noch Koordinatenbereiche und Stringwerte getestet.
Ich hab mir jetzt noch eine Möglichkeit überlegt, die ich aber auch blos nicht wirklich umsetzen möchte:
Die Klasse soll letztendlich alle übergebenen Variablen auf ihre Wertebereiche testen. Wenn auch nur ein Test fehlschlägt kann ich eh nicht weiter arbeiten und muss darauf reagieren.
Eine Möglichkeit wäre, deine Variablen in einer HashMap zu speichern, sind schließlich alles Farben oder? Dann machst du ein mapping HashMap<String,Color> wobei der String der Variablenname und Color die Variable ist. Der Zugriff auf eine Hashmap ist ziemlich performant, ein Konstrukt wie du oben beschrieben hast bremst bei mehreren Variablen (und damit if abfragen) ziemlich aus und ist extrem ineffizient.
if(this.checkColorVal(colVal)){
if(name.equals("fdo")){
this.fdo=colVal;
}else if (name.equals("fli")){
this.fli=colVal;
}
edit: Ich hab grade gesehen dass du ja ein Bean schreibst, bei Beans musst du natürlich für jede Variable eine get/set Methode schreiben, sonst ists kein Bean