Mark
Mark

Reputation: 1099

Initializing Java object instances containing an array of objects

The following code is correct:

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'd 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 some bit of syntax I'm missing, or is this a language 'feature'?

Upvotes: 3

Views: 16186

Answers (2)

polygenelubricants
polygenelubricants

Reputation: 383746

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

Upvotes: 2

T.J. Crowder
T.J. Crowder

Reputation: 1074258

You need to tell it the type of the arrays you're passing 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 the new expression, the braces aren't valid syntactically (because they're initializers -- in this case -- but you haven't said there's anything there to initialize).

Upvotes: 11

Related Questions