Недавно я закончил курс онлайн в AP Computer Science (Java) и на выпускном экзамене был вопрос, что-то вроде этого:Java Неопределенное Generics Кронштейны Использование
Which of these needs a
String
cast to useString
methods on it:
I.ArrayList a = new ArrayList();
II.ArrayList<Object> b = new ArrayList<Object>();
III.ArrayList<String> c = new ArrayList<String>();
Что-то об этом спутать меня: может Опция I
когда-нибудь сможет быть отлита? У этого нет никакого общего определения, так что, если компилятор Java не предопределен ArrayList<Object>
, то какой класс E
?
Это мой тестовый код (Подавить комментарии необходимы, потому что это «непроверенный» операция):
ArrayList a = new ArrayList();
@SuppressWarnings("unchecked")
a.add(new Object());
@SuppressWarnings("unchecked")
a.add(new String("test"));
@SuppressWarnings("unchecked")
a.add(null);
System.out.println((String)(a.get(0)));
Независимо от того, что в аргументах для метода add()
, он всегда дает ошибка компилятора:
test.java:14: error: <identifier> expected
a.add(new Object());
^
Если я пытаюсь добавить идентификатор в любом месте кода (например: a<Object>.add(new Object())
) дает точно такую же ошибку, как и раньше.
Вопрос в том, что на самом деле происходит, когда параметр не передается параметру generics и может ли что-либо быть добавлено в этот список в первую очередь, не говоря уже о том, чтобы бросить в другой объект? Заранее спасибо!
«Идентификатор ожидается» означает «синтаксическая ошибка». Я не думаю, что это имеет ничего общего с дженериками. Я не вижу ничего плохого в коде, который у вас есть. Пожалуйста, дважды проверьте его, и через секунду у меня будет IDE. – markspace
@markspace Я дважды проверил его. Я предполагаю, что ему нужен объект типа E (или, по крайней мере, подкласс E), и он не находит его. – portablesounds