Java:名称相同但泛型类型不同

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)

Daw*_*ica 5

由于类型擦除,你所要求的完全没有意义.类型参数在运行时不再存在,因此您得到的东西与您获得的东西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)

但你为什么要打扰?