unschöne Argumentliste
-
Gegeben sei eine Klasse TextField, die es ermöglichen soll, zusätzlich zu Text auch optional eine Grafik einzufügen.
Der Konstruktur sehe aus wie folgt:
public TextField(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight); { ... }
Es gefällt mir nun nicht, dass 3 der 5 Argumente hinfällig werden falls ein Text OHNE Grafik erzeugt werden soll. Dann muss ich nämlich bei der Erzeugung eines TextField Objekts schreiben:
TextField textField("dum di dum", "", ImagePosition.NONE, 0.0, 0.0);
Das heißt nach dem ""-Argument (= Signal, das keine Grafik eingefügt werden soll) sind die anderen drei sinnlos. Kann man das nicht irgendwie schöner hinkriegen?
-
Biete einen zweiten Konstruktor an, der deinen Wuenschen fuer Text ohne Bild entspricht.
-
Autsch. Da hätte ich auch selbst drauf kommen können
Vielen Dank!
-
Wer hat Dir eigentlich diese schrecklichen Unterstriche vor den Variablennamen beigebracht?
-
-
smax schrieb:
Ok, auch in dem Styleguide da wird das anders gemacht. Abgesehen davon ist der IMHO einzig relevante Styleguide für Java derjenige von Sun:
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
Bei den Naming Conventions steht da:
Variable names should not start with underscore _ or dollar sign $ characters, even though both are allowed.
Naja, ok. Letztendlich ist das Deine Sache. Ich wollte Dich nur darauf hinweisen, dass das sehr unüblich ist. Aus gutem Grund: Gerade am Anfang des Bezeichners erschweren derartige Sonderzeichen einiges. Typischerweise nutzt man ja Dinge wie Codecompletion und ähnliches in IDEs. Mit so einem Unterstrich hat man dadurch immer eine Extra-Indirektion.
-
Wenn du so viele Parameter uebergeben musst, bietet es sich an eine Daten-Klasse zu benutzen:
// schlecht public TextField(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight); { ... } // besser public TextField(TextFieldData data); { ... } class TextFieldData { public String _text; public String _imageName; public ImagePosition _imagePosition; public double _imageWidth; public double _imageHeight; public TextFieldData(String _text, String _imageName, ImagePosition _imagePosition, double _imageWidth, double _imageHeight) { .... } // fuer Default-Data public static TextFieldData createDefault(String _text) { return new TextFieldData(_text, "Default", defaultImagePosition, ....); } }