2013-08-28 93 views
3

在處理,我已經定義了以下類:將數組傳遞給構造函數而不聲明它?

class SomeClass { 
    SomeClass(int[] someArray) { 
     println(someArray); 
    } 
} 

現在我想創建一個類的實例,但我遇到了麻煩傳遞給構造函數的數組:

SomeClass myVar = new SomeClass({ 
    12, 10 
}); 

但是,這總是給我一個錯誤「意外的令牌:{」。所以顯然定義陣列「在飛行中」不起作用。

然而,這將工作:

int[] dummy = {12, 10}; 

SomeClass myVar = new SomeClass(dummy); 

但我發現它,而愚蠢的聲明之外的對象數組,因爲這會導致各種創建多個對象時的麻煩:

int[] dummy = {12, 10}; 
SomeClass myVar = new SomeClass(dummy); 

dummy = {0, 100}; 
SomeClass myVar2 = new SomeClass(dummy); 

該類的兩個實例現在都有對同一個數組{0, 100}的引用,這當然不是我打算做的。

所以我的問題是:如何正確地傳遞一個數組到一個類的構造函數而不必聲明數組之前?它甚至有可能嗎?

謝謝你的回答!

回答

6

你仍然需要以某種方式定義它,你在發送前...試試這個:

SomeClass myVar = new SomeClass(new int [] { 
    12, 10 
}); 

或者你可以嘗試一些Java的語法糖...

class SomeClass { 
    SomeClass(int... someArray) { 
     println(someArray); 
    } 
} 
SomeClass myVar = new SomeClass(12, 10); 

這將例如你可以這樣做:(特殊語法作爲最後一個元素)

class SomeClass { 
    SomeClass(String someString, float someFloat, int... someArray) { 
     println(someString); 
     println(someFloat); 
     println(someArray); 
    } 
} 
SomeClass myVar = new SomeClass("lol",3.14, 12, 10); 

但不是這樣:(特殊語法不作爲最後一個元素)

class SomeClass { 
    SomeClass(String someString, int... someArray, float someFloat) { 
     println(someString); 
     println(someFloat); 
     println(someArray); 
    } 
} 
SomeClass myVar = new SomeClass("lol", 12, 10,3.14); 

數組很有趣!

+1

實際上,第一個語法'new int [] {'正是我的意思,因爲我現在不必在之前將變量的引用存儲在變量中。但'''語法非常棒。我在Java中並不是很流暢,但喜歡使用處理 - 這是一個很棒的技巧! –

+0

任何語法本質上都是引擎蓋下的相同過程,它只會自動完成! :D –

+0

所有這些年來公然討厭,抨擊和燃燒的Java,現在我不得不承認我有點像Java。 ;) –