如何从Java中的String获取类引用?

时间:2012-05-07 18:39:30

标签: java android

如果我需要返回一个基于String的类实例(例如,从JSON创建逻辑),应该如何编写?

我最初的想法是转换,但在Android框架的Java版本中,看起来switch语句不允许使用字符串。

接下来的想法是HashMap:

private HashMap<String, Class> classMap = new HashMap<String, Class>();
classMap.put("someClass", SomeClass.class)?
// ... etc
String someString = jsonObject.getString("someProperty");
Class classRef = classMap.get(someString);
SomeSuperClass classInstance = new classRef();

这不起作用。我宁愿不if/else列出一长串的可能性。

3 个答案:

答案 0 :(得分:5)

只需使用Class<?> clazz = Class.forName("com.yourpackage.YourClass")然后实例化它:clazz.newInstance();

答案 1 :(得分:1)

您还可以使用构造函数参数加载类。

E.g。

public static void load(String p)
    throws ClassNotFoundException, InstantiationException,
    IllegalAccessException{
        Class cl = classLoader.loadClass(p);
        Constructor c = cl.getConstructor(String.class);
        Plugin plug = (Plugin) c.newInstance("myArgument");
    }

答案 2 :(得分:0)

使用地图的方法就是我要做的(你会在Factory Pattern实现中看到它)。你只是没有正确地实例化这个类:

Class classRef = classMap.get(someString);
SomeSuperClass classInstance = classRef.newInstance();