【问题标题】:Initializing Java object instances containing an array of objects初始化包含对象数组的 Java 对象实例
【发布时间】:2010-03-03 18:06:32
【问题描述】:

以下代码正确:

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

这不会编译。

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

【问题讨论】:

标签: java arrays object initialization


【解决方案1】:

你需要告诉它你作为参数传递的数组的类型:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多