2010-03-03 110 views
3

下面的代碼組成的數組初始化Java對象的情況下是正確的:包含對象

public Sample mOboeSamples[] = { new Sample(1,1), new Sample(1,2) }; 
public Sample mGuitarSamples[] = { new Sample(1,1), new Sample(1,2) }; 
public SampleSet mSampleSet[] = { 
     new SampleSet("oboe", mOboeSamples), 
     new SampleSet("guitar", mGuitarSamples) 
     }; 

但我想寫類似:

public SampleSet mSampleSet[] = { 
     new SampleSet("oboe", { new Sample(1,1), new Sample(1,2) }), 
     new SampleSet("guitar", { new Sample(1,1), new Sample(1,2) }) 
     }; 

這並不編譯。

是否有一些我缺少的語法,或者這是一種語言的「功能」?

+0

沒有任何問題的答案下面回答你的問題? – 2012-04-17 06:47:07

+0

與此問題類似:http://stackoverflow.com/questions/2358866/java-anonymous-array-in-for-each-loop/2358904#2358904 :) – 2010-03-03 18:10:41

回答

11

你需要告訴它你傳遞作爲參數的數組類型:

public SampleSet mSampleSet[] = { 
    new SampleSet("oboe", new Sample[] { new Sample(1,1), new Sample(1,2) }), 
    new SampleSet("guitar", new Sample[] { new Sample(1,1), new Sample(1,2) }) 
}; 

沒有new表達,括號是無效的語法(因爲他們是初始化 - 在這情況 - 但你沒有說有什麼可以初始化的)。

2

使用varargs

SampleSet(String name, Sample... samples) { 
    // exactly the same code as before should work 
} 

然後,你可以做

new SampleSet("oboe", new Sample(1, 1), new Sample(1, 2));