簡體   English   中英

在同一行中從同一源初始化多個變量(JAVA)

[英]Initializing multiple variables from same source in one line (JAVA)

給定方法:

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

請注意,兩次不同的運行將給出唯一的輸出,因此以下內容將不正確

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];

但是我正在尋找一種最小和快速的方式來編寫代碼,例如:

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

所以我的問題(使用上面的示例): 如何以盡可能少的代碼行將數組的內容分配給多個變量?

 (obj1run1, obj2run1) = method(); 

這種語法通常稱為“ 讀取元組” ,它可用其他幾種語言(Swift,最新的C#等)提供, 但Java不可用

盡管您的解決方案運行良好,但最好創建一個特殊的類來返回您的特定元組。 由於您返回的兩個對象至少在某種程度上是通過從同一方法返回而以某種方式關聯的,因此最好為它們定義一個類:

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對象,您可以直接使用它,例如

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

您可以混合使用兩種解決方案,但不能像python或scala那樣進行多種操作。 根據上下文,您總是可以找到一些不錯的方法。 最小的方法是:

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

但是,如果在語義上,這兩個對象之間存在牢固的聯系,則可以創建自己的元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM