在JAVA中,我说有一个字符串变量:
String x = "CoolClass";
我有一个名为CoolClass的类,带有一个工作构造函数。如何使用变量x创建CoolClass对象,而不是自己键入CoolClass。
(我需要这样做,因为x将由用户提供并由Scanner读入,并且根据他们的输入,将相应地构造不同的对象/类。)
答案 0 :(得分:9)
Class.forName(x).newInstance()
虽然反思可能很棘手且危险,但它会起作用。你能告诉我们你真正想做什么吗?
答案 1 :(得分:6)
此任务需要反思 - Class.forName(x).newInstance()
。
您可能想要使用不同的设计方法。为什么用户键入所需的类?
答案 2 :(得分:3)
Scanner kbReader = new Scanner(System.In)
String animalType = kbReader.nextLine();
Animal animal; //assume that Lion, Tiger, and Bear inherit Animal
if(animalType.equals("Lion")
{
animal = new Lion();
}
else if(animalType.equals("Tiger")
{
animal = new Tiger();
}
else if(animalType.equals("Bear")
{
animal = new Bear();
}
这不使用任何形式的反射。
答案 3 :(得分:1)
如果您的类具有默认构造函数,则应使用Class.forName(x).newInstance()
。如果构造函数需要接收参数,请使用Class.forName(x).getConstructor(YOUR PARAMETER TYPES).newInstance(YOUR ARGUMENTS)