Ich muss 2 Werte von einer Methode zurückgeben. Mein Ansatz ist wie folgt:
- Erstellen Sie eine innere Klasse mit 2 Feldern, die verwendet werden, um diese 2 Werte beizubehalten
- Fügen Sie die Methode in diese Klasse ein
- Instanziieren Sie die Klasse und rufen Sie die Methode auf.
Das einzige, was an der Methode geändert wird, ist, dass diese beiden Werte am Ende den Feldern der Instanz zugewiesen werden. Dann kann ich diese Werte ansprechen, indem ich mich auf die Felder dieses Objekts beziehe.
Ist es ein gutes Design und warum?
java
design-patterns
Dhblah
quelle
quelle
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Es gibt 2 Ganzzahlen als Rückgabewerte in einem Array zurück.Antworten:
Ich würde dies folgendermaßen argumentieren:
Zusammenfassend würde ich sehen, ob ich dieses "Datenobjekt" in eine vollwertige Klasse mit Daten und Verhalten umwandeln kann. Als zusätzlichen Kommentar möchten Sie die Klasse möglicherweise unveränderlich machen, da ihr Status einmal festgelegt wird. Wenn Sie es unveränderlich machen, können Sie verhindern, dass es falsch eingestellt oder später geändert wird (z. B. wenn jemand eines der Felder auf null setzt und es weitergibt).
Bearbeiten: Wie Patkos Csaba richtig hervorhebt, wird hier das Prinzip der einmaligen Verantwortung ( Single Responsibility Principle, SRP ) angewendet. Die Klasse, die Sie erstellen möchten , sollte wirklich eine Verantwortung haben (als Grund für eine Änderung definiert ). Diese Gestaltungsrichtlinie soll Ihnen dabei helfen, herauszufinden, ob Ihre beiden Felder zu einer Klasse gehören oder nicht. Um beim Wikipedia-Beispiel zu bleiben, könnte Ihre Klasse als eine Art Bericht angesehen werden. In diesem Fall entspricht sie der SRP, ist jedoch ohne weitere Informationen schwer zu kommentieren.
quelle
Pair<OneClass, AnotherClass>
. Einige Leute würden nicht zustimmen . Sollte auf jeden FallPair
ein Implementierungsdetail sein und niemals in einer öffentlichen API-Methode erscheinen.Es gibt das Konzept eines Tupels, das in anderen Sprachen wie Python vorkommt.
Man könnte eine Instanz dieser generierten Klasse zurückgeben, die leicht wiederverwendbar ist:
quelle
create()
, um zu vermeiden, dass die Typparameter im Konstruktor angegeben werden müssen. Ich würde diese Klasse auchPair
eher nennen alsTuple
, da sie nur 2-Tupel-Werte darstellen kann.Es scheint, dass diese Klasse einer anderen Klasse die Verantwortung abnimmt, und das lässt mich denken, dass dieser Entwurf nicht großartig ist.
Für eine Methode, die mehrere Werte zurückgibt, würde ich eher
oder
Beispiel für die zweite Option:
quelle
Das Einfügen mehrerer Rückgabewerte von einer Methode in eine eigene Klasse / Struktur wird häufig in nachrichtenbasierten Systemen verwendet , die eine Klasse für Anforderung und Antwort haben . Ein Beispiel hierfür ist das Simple Object Access Protocol (SOAP) .
Zumindest ist es durchaus üblich. Ob dies gut oder schlecht ist, hängt von Ihrem speziellen Verwendungszweck ab.
quelle
Kurze Antwort: Sie können ein Array oder eine Liste mit den beiden Werten zurückgeben.
Ich persönlich würde gerne zwei verschiedene Methoden schreiben
quelle