Как передать массив в качестве параметра в java-методе?

код:

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

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

someMethod ( {myObject} );

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

но когда:

someMethod ( a );

все нормально. Почему это различие? Спасибо.

Ответ 1

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

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

Вызов

someMethod ( new Object[] { myObject } )

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


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

someMethod(myObject);

Ответ 2

someMethod(new Object[] { "" });

Сделайте трюк!