Java 如何从类的字符串表示转换为类的实例?

Java 如何从类的字符串表示转换为类的实例?,java,android,Java,Android,我有一个类路径的字符串表示。它可以是三个类中的任意一个,所有这些类都实现了相同的接口,Adapter,但我不知道值是什么 “com.example.adapters.Music” “com.example.adapters.Video” “com.example.adapters.Photo” 假设只有一个变量包含上述三个字符串中的一个,如何获得实际类的可用实例 您可以使用: String name = "com.example.adapters.Music"; Object obj = C

我有一个类路径的字符串表示。它可以是三个类中的任意一个,所有这些类都实现了相同的接口,Adapter,但我不知道值是什么

  • “com.example.adapters.Music”
  • “com.example.adapters.Video”
  • “com.example.adapters.Photo”
假设只有一个变量包含上述三个字符串中的一个,如何获得实际类的可用实例

您可以使用:

String name = "com.example.adapters.Music";
Object obj = Class.forName(name).newInstance();
然后必须将
obj
转换为正确的类型(可能通过检查名称或使用
instanceof
)。如果您的类有一个公共基类(或它们实现的接口),并且您只知道它是某个子类,就可以使用
obj
,这会更容易

只有当类具有默认构造函数时,这才有效。否则,您必须使用反射来获取构造函数方法的实例,并使用适当的参数调用它。

您可以使用:

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"};

可以使用字符串数组来容纳三个字符串

String names[]= {"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();

如果类具有无参数构造函数,则通常使用以下方法从其包限定类名(例如,“java.lang.Integer”)创建对象:

Class.forName
Class.newInstance


For e.g MusicClass mObj = Class.forName(<string name>).newInstance();

幸运的是,OP提到所有可能的类都应该实现一个名为Adapter的接口,因此您可以直接转换到Adapter(可能在使用instanceof或Class.isInstance()方法进行快速测试之后)。@jahroy-是的,OP似乎可以安全地转换到
适配器。但是,警告的第二部分仍然有效:只有知道对象是
适配器
,并且不需要知道特定类型的
适配器
,这才有帮助。幸运的是,OP提到所有可能的类都应该实现名为Adapter的接口,因此您可以直接强制转换到适配器(可能在使用instanceof或Class.isInstance()方法进行快速测试之后)@jahroy-是的,OP似乎可以安全地将其转换为
适配器
。但是,警告的第二部分仍然有效:只有知道对象是
适配器
,并且不需要知道
适配器的特定类型,这才有帮助。谢谢,但这不是我的问题。谢谢,但这不是我的问题这不是我的问题。