我有一個泛型類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
之間的差。
更新:
grep的有什麼無限制通配符參數化類型和原始類型之間的區別?對this link可能會有幫助。