初始化包含对象数组的Java对象实例

时间:2010-03-03 18:06:33

标签: java arrays object initialization

以下代码是正确的:

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) } )
        };

这不会编译。

我是否缺少一些语法,或者这是一种语言'功能'?

2 个答案:

答案 0 :(得分: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表达式,大括号在语法上无效(因为它们是初始化器 - 在这种情况下 - 但你还没有说有任何东西要初始化)。

答案 1 :(得分: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));