1

嗨,我正在制作一个接收字符串作为输入的程序,并基于该字符串创建一个类的实例。

问题是我的程序将来可能有新的类,我希望当这种情况发生时我不必对我的代码进行太多更改,所以我想避免使用 if 或 switch 链。

例如,如果我收到“Class1”作为输入,我想创建该类的一个实例

但是如果将来我希望能够创建“Class2”的实例,我不想通过在开关上添加新的 if 或新案例来更改以前的代码。

有没有办法做到这一点?

4

4 回答 4

1

您需要使用反射 API。

你的字符串也会有包的完整路径

String yourClassPathPackage = "com.your.class.path.YourClass";
YourClass = (YourClass) Class.forName(yourClassPathPackage).newInstance();
于 2013-11-13T16:19:30.857 回答
1
Class.forName(classNameReceivedAsParameter).newInstance();

您需要将包名连接到参数以获得完整的类名。而且,显然,这仅适用于具有无参数构造函数的类。

于 2013-11-13T16:20:46.427 回答
0

您可以使用类的 forName 函数。解决方案在这里描述:“Class.forName()”和“Class.forName().newInstance()”有什么区别?

于 2013-11-13T16:20:15.453 回答
0

如前所述,您可以使用反射 API:

String yourClassPathPackage = "com.your.class.path.YourClass" 
YourClass = (YourClass) Class.forName(yourClassPathPackage).newInstance();

但是,如果您在构造函数中有参数,您可以使用 get Constructor 方法来获取具有正确参数的构造函数:

Class.forName(yourClassPathPackage).getConstructor(String.class).newInstance("MyClass");
于 2013-11-13T16:29:04.397 回答