Инициализация экземпляров Java-объектов, содержащих массив объектов - PullRequest
3 голосов
/ 03 марта 2010

Следующий код правильный:

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 ]

11 голосов
/ 03 марта 2010

Вы должны указать тип передаваемых массивов в качестве параметров:

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 голосов
/ 03 марта 2010

Использование 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...