2016-05-21 3 views
4

Рассмотрим следующий код:Присвоить литерал массива объекта переменной

Object obj = {}; 

Это приводит к следующей ошибке:

Type mismatch: cannot convert from Object[] to Object 

Однако, в соответствии с Java стандартной every Array is an Object:

In the Java programming language, arrays are objects (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.

Кроме того, следующие фрагменты компилируются без проблем:

Object [] arr = {}; 
Object obj = arr; 

Вопрос:, что мне не хватает в первом примере кода, то есть, почему не она действует?

P.S .: Я почти уверен, что кто-то уже задал этот вопрос, потому что он кажется таким основным. Однако я не нашел полезных результатов ни здесь, ни в Google (возможно, потому, что квадратные скобки игнорируются в поиске?). Если есть дубликат, который я пропустил, тогда, пожалуйста, не стесняйтесь закрыть мой вопрос. Для записей я проверил следующие вопросы. В то время как их название казалось многообещающим, все они дело с другими видами проблем, или не содержит ответа на мой вопрос:

ответ

0

Инициализация в строке массива может использоваться только для объявлений типа массива - это часть синтаксиса языка.

В Java 8, эта линия

Object o = {}; 

не дает ошибку компиляции вы сообщаете. Вместо этого, он дает:

Array initializer not allowed here

Массив Инициализаторы может только появляются в качестве начального значения в массиве .

+0

@TimBiegeleisen: Пробовал с кастингом, также не работает. – Attilio

+1

У вас есть ссылка на ваше заявление? (Это то, что я подозреваю, но не смог найти источник, подтверждающий его.) – Attilio

+0

@Attilio В сомнении проконсультируйтесь со спецификацией языка Java. Я уверен, что вы нашли там ответ. – GhostCat

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