3

在 JAVA 中,假设我有一个字符串变量:

String x = "CoolClass";

我有一个名为 CoolClass 的类,它有一个有效的构造函数。我如何使用变量 x 创建 CoolClass 的对象,而不是键入 CoolClass 本身。

(我需要这样做,因为 x 将由用户给出并由 Scanner 读取,并且根据他们的输入,将相应地构造不同的对象/类)。

4

4 回答 4

9
Class.forName(x).newInstance()

会起作用,尽管反射可能是棘手和危险的。你能告诉我们你真正想要做什么吗?

于 2013-06-04T20:42:11.330 回答
6

这个任务需要反思—— Class.forName(x).newInstance()
您可能想要使用不同的设计方法。为什么用户要输入所需的类?

于 2013-06-04T20:41:48.083 回答
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();
}

这没有使用任何类型的反射。

于 2013-06-04T20:43:55.040 回答
1

Class.forName(x).newInstance()如果你的类有默认构造函数,你应该使用。如果构造函数预期接收参数使用Class.forName(x).getConstructor(YOUR PARAMETER TYPES).newInstance(YOUR ARGUMENTS)

于 2013-06-04T20:43:14.680 回答