Почему мы не должны указывать скобки при инициализации объекта массива в Java?

у меня была та же проблема, i (удаленная «ng-model») изменила это:

<select ng-model="mapayear" id="mapayear" name="mapayear" style="  display:inline-block !important;  max-width: 20%;" class="form-control">
  <option id="removable" hidden> Selecione u </option>
    <option selected ng-repeat="x in anos" value="{{ x.ano }}">{{ x.ano }}
</option>
</select>

на это:

<select id="mapayear" name="mapayear" style="  display:inline-block !important;  max-width: 20%;" class="form-control">
  <option id="removable" hidden> Selecione u </option>
    <option selected ng-repeat="x in anos" value="{{ x.ano }}">{{ x.ano }}
</option>
</select>

теперь работает, но в в моем случае это было причиной, когда я удалил эту область из ng.controller, проверьте, не выполнил ли u то же самое.

0
задан user207421 27 March 2019 в 04:41
поделиться

2 ответа

Разница между созданием объекта и созданием массива заключается в следующем:

  • нормальные классы имеют вызываемые конструкторы.
    • Скобки в new ArrayList<String>() указывают на вызов конструктора.
    • Даже если конструктор не имеет аргументов, круглые скобки должны присутствовать (так же, как в вызове метода без параметров).
  • классы массивов, с другой стороны, не имеют конструктора
    • Хотя массивы являются объектами, их классы создаются JVM и поэтому подлежат специальной обработке, которую другие классы не могут иметь
    • ]
    • Инициализация массива происходит как побочный эффект команд байт-кода anewarray, multianewarray и newarray.

То, что у классов массивов нет конструкторов, можно продемонстрировать, выполнив

System.out.println(int[].class.getConstructors().length);

, который возвращает 0.


В конце концов, это сводится к решениям, которые разработчики языков приняли более 20 лет назад, и на которые повлияло решение по проектированию из других существующих языков (например, C ++).

0
ответ дан Thomas Kläger 27 March 2019 в 04:41
поделиться

Массивы не могут быть созданы так же, как создание ArrayList. Как сказал пользователь 207421, «Массивы предназначены для инициализации таким способом с помощью [] ». (например)

ArrayList aList = new ArrayList(); // It is valid

Arrays aArr = new Arrays();// It is invalid. Since there is no public constructor in java.util.Arrays

Исходный код: http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/ classes / java / util / Arrays.java

C & amp; Языки C ++ используют то же самое [] для инициализации массива. Так что Java тоже следующая.

0
ответ дан Ramesh Subramanian 27 March 2019 в 04:41
поделиться
Другие вопросы по тегам:

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