2013-05-22 2 views
2

можно установить массив как это:Передача массива в качестве аргумента в виде {}

Object[] objects = {new Object()}; 

Однако, если у меня есть метод:

public void setObject(Object[] objects) { 

} 

Я не могу сделать следующее:

setObject({new Object()}); 

Почему это? Почему не {new Object()} хватает в качестве аргумента, но достаточно инициализировать массив Object[]?

ответ

8

Вы можете пройти анонимный массив:

setObject(new Object[] { new Object() }); 

Обратите внимание, что синтаксис { new Object() } просто работает при инициализации массива на его объявлении. Например:

Object[] arr = { new Object() }; 

Это не работает после объявления массива:

Object[] arr; 
//uncomment below line and you'll get a compiler error 
//arr = { new Object() }; 
arr = new Object[] { new Object() }; 
+0

Хе-хе, я просто решил эту проблему на прошлой неделе и придумал почти то же самое решение. Я знаю, если это «идеальный» ответ, но я могу заверить вас, что он работает нормально. – WPrecht

1

Правильный обратный вызов:

setObject(new Object[]{new Object()}); 
3

Поскольку вы не ввели массив. Это могут быть объекты, целые числа, что угодно.

должно работать:

setObject(new Object[]{new Object()}); 
1

Каждый Java массив имеет тип компонента. При использовании в инициализаторе компилятор указывает, что тип нового массива (правая сторона) совпадает с типом объявления (левая сторона).

Когда декларация отсутствует, компилятор не знает, каким должен быть тип компонента массива. Вы должны быть явным, используя выражение setObject(new Object[] { new Object() })

Можно ли задаться вопросом, почему компилятор не выводит тип из объявленного типа параметра метода, как это происходит при инициализации переменной. Но компилятор разрешает метод вызова на основе типов параметров; если вы не знаете метод, который вы вызываете, вы не можете вывести ничего из его типов параметров. При инициализации переменной нет округления.

Смежные вопросы