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