使用字符串创建对象

时间:2012-10-08 23:17:47

标签: java reflection

  

可能重复:
  Use string in place of variable name

Java中是否有任何方法允许使用字符串创建对象?

让我们说,我有一个名为“Toyata”的课程,无论如何我可以创建一个Toyata的对象 在Car类中使用字符串变量s?

public class Car{
String s = "Toyota";
}

public class Toyota{
int speed;

public Toyota(int speed){
this.speed=speed;
}

}

2 个答案:

答案 0 :(得分:0)

可以使用反射,但你需要一个完全限定的类名:

https://stackoverflow.com/a/4030634/1217408

编辑:

Hovercraft Full Of Eels关于使用map查找的评论在这种情况下可能更合适。

答案 1 :(得分:0)

您需要通过s的值查询类(假设它在默认包中,这应该有效)。然后,您必须通过类“getConstructor()方法查找正确的构造函数。由于Toyota不包含默认构造函数,因此您需要查询与预期参数匹配的构造函数。在这种情况下,它是intintClass形式表示Integer.TYPE。最后,在完成所有操作之后,您可以在构造函数上调用newInstance()并传入所需的速度,并且您应该准备好使用新实例。当然会有一些经过检查的例外处理。

Class<?> clazz = Class.forName(s);
Constructor constructor = clazz.getConstructor(new Class[] {Integer.TYPE});
Toyota toyota = (Toyota) constructor.newInstance(new Object[] {90});