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

时间:2013-01-20 04:04:00

标签: java android

我有一个类路径的字符串表示。它可以是三个类中的任何一个,所有类都实现相同的接口,适配器,但我不知道它的价值是什么。

  • " com.example.adapters.Music"
  • " com.example.adapters.Video"
  • " com.example.adapters.Photo"

如果只有一个变量持有上面三个字符串中的一个,我怎样才能获得实际类的可用实例?

3 个答案:

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