Initializing instances of Java objects containing an array of objects

The correct code is:

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

but I would like to write something like:

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

This does not compile.

Is there any bit of syntax that I am missing, or is it a language feature?

+3
source share
2 answers

You need to specify the type of arrays that you pass as parameters:

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

Without an expression, the newbrackets are invalid syntactically (because they are initializers - in this case - but you did not say anything there to initialize).

+11
source

Use varargs :

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

Then you can do

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

Source: https://habr.com/ru/post/1735291/


All Articles