2017-10-31 4 views
1

die Methode Gegeben:Initialisieren mehrerer Variablen aus derselben Quelle in einer Linie (JAVA)

private Object[] method(){ 
    //run some codes 
    return new Object[]{Obj1, Obj2}; 
} 

Beachten Sie, dass 2 verschiedene Läufe einzigartige Ausgänge geben wird daher das Folgende

Object obj1run1 = method()[0], obj2run1 = method()[1]; 
//Because the method will be run 2 times with 2 unique results; 

Ich weiß, falsch Ich kann meine Probleme lösen, indem ich Folgendes mache:

Object hold[] = method(); 
obj1run1 = hold[0]; 
obj2run1 = hold[1]; 

Aber ich bin auf der Suche nach einem minimalen und schnellen Weg von wr iting den Code, wie etwa:

(obj1run1, obj2run1) = method(); 
//saw this somewhere but doesnt work on Java 

Also meine Frage (das obige Beispiel verwenden): Wie i zuweisen Inhalt eines Arrays in mehrere Variablen in so wenig Zeilen Code wie möglich?

+1

Java unterstützt diese Art des Entpackens nicht. – khelwood

+0

Das kann in einigen Sprachen gemacht werden, aber Java unterstützt es nicht. –

+0

@Khelwood gibt es eine Alternative? oder ist meine abonnierte Lösung die einzige? – kbluue

Antwort

1
(obj1run1, obj2run1) = method(); 

Diese Syntax ist gemeinhin als , ein Tupel Lesen but not in Java in mehreren anderen Sprachen (Swift, neueste C#, etc.) zur Verfügung.

Obwohl Ihre Lösung gut funktioniert, können Sie besser eine spezielle Klasse für die Rückgabe Ihres bestimmten Tupels erstellen. Da die beiden Objekte, die Sie in einige Weise im Zusammenhang zurückkehren, zumindest auf Grund von der gleichen Methode zurückgegeben wird, kann es eine gute Idee, eine Klasse zu definieren, für sie:

class HoldingPair { 
    private final Object first; 
    private final Object second; 
    public Object getFirst() { return first; } 
    public Object getSecond() { return second; } 
    public HoldingPair(Object a, Object b) { 
     first = a; 
     second = b; 
    } 
    ... // hashCode, equal, toString 
} 

Jetzt ist Ihre Methode Rückkehr ein HoldingPair Objekt könnte, die Sie direkt zu verwenden, wäre in der Lage, zum Beispiel

HoldingPair hold = method(); 
... 
if (hold.getFirst() != null) { 
    ... 
} 
if (hold.getSecond() != null) { 
    ... 
} 
1

Sie können Ihre beiden Lösungen mischen, aber sie können mehrere Affektiertheit wie in python oder scala nicht tun. Je nach Kontext kann man immer etwas Hübsches finden. Die minimale Art und Weise, es zu tun ist:

Object hold[] = method(); 
Object obj1run1 = hold[0], obj2run1 = hold[1]; 

Aber Sie können Ihre eigene Tuple erstellen, wenn semantisch, gibt es eine starke Verbindung zwischen diesen beiden Objekten ist.

Verwandte Themen