Вопрос по arrays, methods, java, parameters – Как передать массив в качестве параметра в методе Java?

11

Код:

Object[] a={ myObject};
someMethod(Object ...arg);

когда я пытаюсь:

someMethod ( {myObject} );

Я получаю ошибку в Eclipse.

но когда:

someMethod ( a );

все ок. Почему эта разница? Благодарю.

Ваш Ответ

2   ответа
6
someMethod(new Object[] { "" });

Должен сделать свое дело!

21

Поскольку{ myObject } синтаксисспециальный синтаксический сахар который применяется только при инициализации переменной массива. Это потому, что само по себе присваивание не имеет информации о типе; но в особом случае присваивания тип полностью выводится из переменной.

В первом примере компилятор знает, что вы присваиваетеa (который являетсяObject[]), поэтому этот синтаксис разрешен. В последнем случае вы не инициализируете переменную (и из-за слабости в выводе типа Java она даже не полностью проработает контекст назначения параметра). Таким образом, он не будет знать, каким должен быть тип массива, даже если бы он мог однозначно определить, что именно это вы пытаетесь сделать (в отличие, например, от объявления блока).

призвание

someMethod ( new Object[] { myObject } )

будет работать, если вы хотите определить массив на месте без использования переменной.

Хотя приведенный выше ответ на ваш вопрос в ответ на вопрос, я заметил, что метод, который вы вызываете,varargs вместо того, чтобы явно требовать параметр массива. Так что в этом случае вы можете просто позвонить

someMethod(myObject);

Похожие вопросы