Java 如何基于字符串创建类的实例而不进行多个切换和if';s

Java 如何基于字符串创建类的实例而不进行多个切换和if';s,java,string,class,instance,creation,Java,String,Class,Instance,Creation,嗨,我正在制作一个程序,它接收一个字符串作为输入,并基于该字符串创建一个类的实例 问题是我的程序将来可能会有新的类,我希望在这种情况下,我不必对代码做太多更改,所以我希望避免使用if或switch链 例如,如果我收到“Class1”作为输入,我想创建该类的一个实例 但是,如果将来我想创建“Class2”的实例,我不想通过在交换机上添加新的if或case来更改以前的代码 还有其他方法吗?您需要使用反射API 您的字符串也将具有包的完整路径 String yourClassPathPackage =

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

问题是我的程序将来可能会有新的类,我希望在这种情况下,我不必对代码做太多更改,所以我希望避免使用if或switch链

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

但是,如果将来我想创建“Class2”的实例,我不想通过在交换机上添加新的if或case来更改以前的代码


还有其他方法吗?

您需要使用反射API

您的字符串也将具有包的完整路径

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

您可以使用类的forName函数。解决方案如下所述:


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

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

String yourClassPathPackage = "com.your.class.path.YourClass" 
YourClass = (YourClass) Class.forName(yourClassPathPackage).newInstance();
但如果构造函数中有参数,则可以使用get constructor方法获取具有正确参数的构造函数:

Class.forName(yourClassPathPackage).getConstructor(String.class).newInstance("MyClass");
Class.forName(yourClassPathPackage).getConstructor(String.class).newInstance("MyClass");