В книге «Дженерики и коллекции Java» Мориса Нафталина, Филиппа Уодлера, я проходил через ограничения Дженерики и столкнулся с сомнением.Может быть, это ответ в книге, но я думаю, что я смущен лой.
В следующем коде:
List<List<?>> lists = new ArrayList<List<?>>();
lists.add(Arrays.asList(1,2,3));
lists.add(Arrays.asList("four","five"));
assert lists.toString().equals("[[1, 2, 3], [four, five]]");
Как сказано в книге, создание экземпляров вложенных подстановочных знаков не имеет проблем, поскольку для первого списка оно знает, что оно будет содержать объекты спискаТипы.
Но я попытался изменить приведенный выше код и выдал одно предупреждение и одну ошибку времени компиляции.Я пытался сделать:
List<?> sample= Arrays.asList(1,2,3,4.14);
List<List<?>> lists = new ArrayList<List<?>>();
lists.add(Arrays.asList(1,2,3));
lists.get(0).add(5);
lists.add(Arrays.asList("four","five"));
System.out.println(sample.toString());
assert lists.toString().equals("[[1, 2, 3], [four, five]]");
Мои вопросы: 1) В первой строке, если я напишу:
List<?> sample= Arrays.asList(1,2,3);
Здесь не выдается предупреждение, но какнаписано в предыдущем блоке, если я напишу:
List<?> sample= Arrays.asList(1,2,3,4.14);
выдается предупреждение.Почему?
2) Почему в четвертой строке есть ошибка времени компиляции:
lists.get(0).add(5);
Заранее спасибо.