我想为我的代码使用ArrayList,但它应该包含不同类型的对象。 所以它应该是这样的:
switch (foo) {
case "foo1":
list=new ArrayList<foo1>();
break;
case "foo2":
list = new ArrayList<foo2>();
break;
我知道发布的代码不起作用,但可以使其相似。
在你问之前,应该在这个List上执行多个动作,但是我不会再用一个不同的List名称再写一遍。
public class foo1 {}
public class foo2 {}
import java.util.ArrayList;
public class work{
public static void main(String[] args){
ArrayList<?> list;
switch (args[0]) {
case "foo1":
list=new ArrayList<foo1>();
break;
case "foo2":
list= new ArrayList<foo2>();
break;
default:
System.out.println("Some Error Text");
return;
}
list.add(new foo1());
}
}
答案 0 :(得分:5)
由于类型擦除,您要求的是完全没有意义。类型参数在运行时不再存在,因此从new ArrayList<Foo1>
获得的内容与从new ArrayList<Foo2>
获得的内容完全相同。
换句话说,类型参数仅是编译器的信息。使用您正在使用的代码,编译器实际上只关心list
的声明类型,而不是您实例化时提供的类型。
当然,如果您已声明
,您的代码将会编译ArrayList<?> list;
或
List<?> list;
或者如果Foo1
和Foo2
有一个共同的超类型(Object
除外),你可以缩小它 - 说它们都是Foo
的子类型,你可以写
List<? extends Foo> list;
但你为什么要打扰?