2010-03-03 243 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));