在 JAVA 中,假设我有一个字符串变量:
String x = "CoolClass";
我有一个名为 CoolClass 的类,它有一个有效的构造函数。我如何使用变量 x 创建 CoolClass 的对象,而不是键入 CoolClass 本身。
(我需要这样做,因为 x 将由用户给出并由 Scanner 读取,并且根据他们的输入,将相应地构造不同的对象/类)。
Class.forName(x).newInstance()
会起作用,尽管反射可能是棘手和危险的。你能告诉我们你真正想要做什么吗?
这个任务需要反思—— Class.forName(x).newInstance()
。
您可能想要使用不同的设计方法。为什么用户要输入所需的类?
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();
}
这没有使用任何类型的反射。
Class.forName(x).newInstance()
如果你的类有默认构造函数,你应该使用。如果构造函数预期接收参数使用Class.forName(x).getConstructor(YOUR PARAMETER TYPES).newInstance(YOUR ARGUMENTS)