说我有两个实现接口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。它本质上是在问同样的事情,您将获得有关使用反射的可能解决方法的良好信息。