我有一个类路径的字符串表示。它可以是三个类中的任何一个,它们都实现了相同的接口Adapter,但我不知道值是什么。
- “com.example.adapters.Music”
- “com.example.adapters.Video”
- “com.example.adapters.Photo”
仅给定一个包含上述三个字符串之一的变量,如何获得实际类的可用实例?
如果一个类有一个无参数的构造函数,那么从它的包限定类名(例如,“java.lang.Integer”)创建一个对象通常使用这些方法完成:
Class.forName
Class.newInstance
For e.g MusicClass mObj = Class.forName(<string name>).newInstance();
如果需要将参数传递给构造函数,则可以使用以下替代方法:
Class.getConstructor
Constructor.newInstance
您可以使用:
String name = "com.example.adapters.Music";
Object obj = Class.forName(name).newInstance();
然后,您必须转换obj
为正确的类型(可能通过检查名称或使用instanceof
)。如果你的类有一个通用的基类(或它们实现的接口)并且你obj
只知道它是某个子类就可以使用它会更容易。
这仅在类具有默认构造函数时才有效。否则,您将不得不使用反射来获取构造方法的实例并使用正确的参数调用它。
您可以使用字符串数组来保存三个字符串
String names[]= {"com.example.adapters.Music","com.example.adapters.Video","com.example.adapters.Photo"};