说我有两个实现接口A的Foo和Bar类。我要么想创建一个Foo或Bar的ArrayList。在命令行参数中,用户必须输入Foo或Bar来尝试创建对象的ArrayList。

所以:

public static void main(String [] args){
    String type = args[0];
    ArrayList<type> list = new ArrayList<type>();
    }


我如何从字符串类型转到对Foo或Bar类的引用,所以它正在做

ArrayList<Foo> list = new ArrayList<Foo>();
or
ArrayList<Bar> list = new ArrayList<Bar>();


这样,我可以执行以下操作:

for(int i = 0 ; i < list.size() ; i++){
    list(i).doSomething();
    //doSomething is a function in interface A that Foo and Bar are required to implement
}


明确一点,我不要这样的东西

if (type.equals("Foo")) list = ArrayList<Foo>();


我希望能够使用具有与类型相同名称的任何有效类制作ArrayList。

最佳答案

编译器将需要知道类型,这听起来像您要将类型视为运行时变量而不是编译时事实。

检出Get generic type of class at runtime。它本质上是在问同样的事情,您将获得有关使用反射的可能解决方法的良好信息。

10-07 19:13
查看更多