2017-10-31 5 views
1

は方法を考える(JAVA)1行で同じソースから複数の変数を初期化:

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

2異なる実行は、したがって、以下は、私が知っている

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

不正確になりますユニークな出力を与えることに注意してください

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

しかし、私は最小限かつ迅速な方法を探しています。以下のように、コードをitingは言う:

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

は私の質問(上の例を使用して):私はできる限りのコードのように少しラインで複数の変数に配列の内容を割り当てるにはどうすればよい?一般タプルを読み取ると呼ば

+1

Javaは、この種の開梱をサポートしていません。 – khelwood

+0

これはいくつかの言語で行うことができますが、javaではサポートしていません。 –

+0

@khelwoodには別の方法がありますか?または唯一の私の購読ソリューションですか? – kbluue

答えて

1
(obj1run1, obj2run1) = method(); 

この構文、いくつかの他の言語(スウィフト、最新のC#など)で提供されbut not in Java

あなたのソリューションは正常に動作しますが、特定のタプルを返すための特別なクラスを作成する方がよい場合があります。あなたが返す2つのオブジェクトがに何らかの方法に関連しているので、少なくとも同じメソッドから返されるのおかげで、彼らのためにクラスを定義するのは良い考えかもしれ:

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 
} 

今すぐあなたの方法例

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

のためにあなたがあなたのソリューションの両方を混在させることができますが、あなたはPythonやスカラ座のように複数の気取りを行うことはできません、あなたが直接使用することができるだろうHoldingPairオブジェクトを返すことができます。文脈に応じて、あなたはいつもそれを行うのにかなりかわいいものを見つけることができます。

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

しかし、意味的に、これら2つのオブジェクト間の強いリンクがある場合、あなたはあなた自身のタプルを作成することができます。それを行うための最小限の方法があります。