Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Об ArrayList и универсальном типе

Автор вопроса: Mạnh Nguyễn ĐứcОтветов: 2

1. Во-первых: в чем разница между

ArrayList<Class> myList = new ArrayList<Class>();
ArrayList<Class> myList = new ArrayList<>();

2. Второе:

Если я объявлю myList следующим образом:

ArrayList myList = new ArrayList<Integer>();

Почему это все еще работает: myList.add("A String!!");

но НЕ работает с этим объявлением:

ArrayList<Integer> myList = new ArrayList<>();
  • Я имею в виду ArrayList myList = new ArrayList‹Integer›(); Mạnh Nguyễn Đức 03.01.2018
  • извините за мою невнимательность @Eran Mạnh Nguyễn Đức 03.01.2018

javanetbeansarraylistgeneric-type-argument

Ответы

Ответ 1 · Veselin Davidov

Разницы в первых двух нет. Второй - это короткая версия первого, добавленного в java 7 (я думаю)

Во-вторых, вы объявляете общий список Java (в объявлении не говорится, что это целочисленный список). Затем вы даете этой переменной экземпляр ArrayList. Это то, что вы делаете коротышка и не в декларации. Вот почему код компилируется (вы можете добавить строку, потому что экземпляр списка массивов может быть чем угодно). Но это не удастся во время выполнения, потому что в этом текущем запуске экземпляр представляет собой список целых чисел.

Когда вы объявляете его ArrayList myList, тогда он знает время компиляции, что этот список может иметь только целые числа, и компиляция завершается ошибкой.

Ответ 2 · Turing85

На ваш первый вопрос:

В чем разница между

ArrayList<Class> myList = new ArrayList<Class>();
ArrayList<Class> myList = new ArrayList<>();

Нет никакой разницы. Во втором случае вы позволяете компилятору выполнить вывод типа. определитесь с типом.

На второй вопрос:

Если я объявлю myList следующим образом:

ArrayList myList = new ArrayList<Integer>();

но НЕ работает с этим объявлением:

ArrayList<Integer> myList = new ArrayList<>();

В первом случае вы используете необработанный тип. а>. Это похоже на использование Object в качестве универсального типа, только хуже. Вы отказываетесь от всех проверок типов во время компиляции, и поэтому в вашем примере вы столкнетесь с Exception.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы