use*_*850 2 java generics types
我想为我的代码使用ArrayList,但它应该包含不同类型的对象.所以它应该是这样的:
switch (foo) {
case "foo1":
list=new ArrayList<foo1>();
break;
case "foo2":
list = new ArrayList<foo2>();
break;
Run Code Online (Sandbox Code Playgroud)
我知道发布的代码不起作用,但有可能使类似的东西.
在你问之前,应该在这个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());
}
}
Run Code Online (Sandbox Code Playgroud)
由于类型擦除,你所要求的完全没有意义.类型参数在运行时不再存在,因此您得到的东西与您获得的东西new ArrayList<Foo1>
完全相同new ArrayList<Foo2>
.
换句话说,类型参数仅是编译器的信息.使用您正在使用的代码,编译器实际上只关心声明的类型list
,而不是您实例化时提供的类型.
当然,如果你已声明,你的代码将编译
ArrayList<?> list;
Run Code Online (Sandbox Code Playgroud)
要么
List<?> list;
Run Code Online (Sandbox Code Playgroud)
或者你可以缩小它,如果Foo1
并且Foo2
有一个共同的超类型(除了Object
) - 说它们都是子类型Foo
,你可以写
List<? extends Foo> list;
Run Code Online (Sandbox Code Playgroud)
但你为什么要打扰?