У меня есть общий класс Foo<T>
и параметризованные типы Foo<String>
и Foo<Integer>
. Теперь я хочу поместить различные параметризованные типы в один ArrayList
. Каков правильный способ сделать это?Контейнер общих типов в java
кандидат 1:
public class MMM {
public static void main(String[] args) {
Foo<String> fooString = new Foo<String>();
Foo<Integer> fooInteger = new Foo<Integer>();
ArrayList<Foo<?> > list = new ArrayList<Foo<?> >();
list.add(fooString);
list.add(fooInteger);
for (Foo<?> foo : list) {
// Do something on foo.
}
}
}
class Foo<T> {}
кандидат 2:
public class MMM {
public static void main(String[] args) {
Foo<String> fooString = new Foo<String>();
Foo<Integer> fooInteger = new Foo<Integer>();
ArrayList<Foo> list = new ArrayList<Foo>();
list.add(fooString);
list.add(fooInteger);
for (Foo foo : list) {
// Do something on foo.
}
}
}
class Foo<T> {}
Одним словом, это связано с разницей между Foo<?>
и сыром типа Foo
.
Update:
Grep В чем разница между неограниченным подстановочным параметризованным типом и необработанным типом? на this link может быть полезно.