可能重复:
使用字符串代替变量名
Java中是否有任何方法允许使用字符串创建对象?
假设我有一个名为“Toyata”的类,无论如何我可以使用 Car 类中的字符串变量 s 创建一个 Toyata 的对象吗?
public class Car{
String s = "Toyota";
}
public class Toyota{
int speed;
public Toyota(int speed){
this.speed=speed;
}
}
可能重复:
使用字符串代替变量名
Java中是否有任何方法允许使用字符串创建对象?
假设我有一个名为“Toyata”的类,无论如何我可以使用 Car 类中的字符串变量 s 创建一个 Toyata 的对象吗?
public class Car{
String s = "Toyota";
}
public class Toyota{
int speed;
public Toyota(int speed){
this.speed=speed;
}
}
您需要通过s
. 然后你必须通过你的类的getConstructor()
方法查找正确的构造函数。由于Toyota
不包含默认构造函数,因此您需要查询与预期参数匹配的构造函数。在这种情况下,它是一个int
. int
以Class
形式表示Integer.TYPE
。最后,一切都说完了,你可以newInstance()
用传入的所需速度调用构造函数,你应该有一个可以使用的新实例。当然会有一些检查异常需要处理。
Class<?> clazz = Class.forName(s);
Constructor constructor = clazz.getConstructor(new Class[] {Integer.TYPE});
Toyota toyota = (Toyota) constructor.newInstance(new Object[] {90});
您可以使用反射,但您需要一个完全限定的类名:
https://stackoverflow.com/a/4030634/1217408
编辑:
Hovercraft Full Of Eels 关于使用map
查找的评论在这种情况下可能更合适。