假设我有两个实现接口(interface) 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 。它本质上会问同样的事情,您将获得有关使用反射的可能解决方案的良好信息。
关于java - 如何使用同名字符串引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327514/