Подскажите почему в документации сказано Cannot Create Arrays of Parameterized Types ? По-моему это немного противоречит условию задачи.
Юрий
18 уровень
Подскажите по документации.
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ярослав Java Developer Master
14 февраля 2018, 08:49решение
В момент выполнения программы, нет разницы между ArrayList<String>, ArrayList<Integer>, ArrayList<любой_другой_тип>. Потому если у нас есть
ArrayList<String>[] lists = new ArrayList<String>[2]; // если бы скомпилировалось
То когда мы будем делать:
lists[0] = new ArrayList<Integer>();
lists[1] = new ArrayList<Scanner>();
Для программы будет все равно, она будет знать, что там ArrayList, а какой именно - нет. Потому обнаружить неправильное присвоение не предоставляется возможным.
Почему все так: из-за стирания типов. Во время компиляции, все дженерик типы стираются и превращаются в Object или в другой нужный тип (тут могу немного ошибаться), потому во время выполнения получить информацию о типе уже нельзя. Из-за этого и нельзя создавать массив.
Можно создать просто массив ArrayList[2]; или еще есть вариант (ArrayList<String>[]) ArrayList[2], вот только про это хотелось бы услышать информацию уже от кого-то поопытней, потому что не совсем ясно, почему нельзя создавать массив какого-то типа, но можно к нему закастить?
Только что нашел еще полезную информацию. Можно создать ArrayList[2], а в 0 и 1 индекс уже засунуть конкретные списки ArrayList<String>; Другими словами, в каждую ячейку засунуть конкретный строковый лист отдельно.
А вообще, правильнее всего было бы создавать не массив, а ArrayList<ArrayList<String>>, а туда уже добавлять списки. Однако данная задача как раз для того, чтобы прощупать создание дженерик массивов.
+3
--------Master
14 февраля 2018, 08:34
Как я понимаю, смысл в том, чтобы именно тип списка (или другого параметризованного объекта) не указывать при создании массива - массив должен быть просто массивом списков, а не массивом списков строк или массивом списков чисел.
+1
Юрий
14 февраля 2018, 10:08
В том и суть, что валидатор в задаче просит объявить именно ArrayList<String>[] . Хотя это вроде как идет в разрез с документацией.
0