我有一个泛型类Foo<T>
和参数化类型Foo<String>
和Foo<Integer>
. 现在我想将不同的参数化类型放入单个ArrayList
. 这样做的正确方法是什么?
候选人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<?>
总而言之,它与和 raw type的区别有关Foo
。
更新:
Grep无界通配符参数化类型和原始类型有什么区别?在此链接上可能会有所帮助。