1

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

我最初的想法是开关,但在 Android 框架的 Java 版本中,开关语句似乎不允许字符串。

接下来的想法是一个 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列出一长串的可能性。

4

3 回答 3

6

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

于 2012-05-07T18:43:17.323 回答
1

您还可以加载具有构造函数参数的类。

例如

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");
    }
于 2012-05-07T18:53:54.583 回答
0

你使用地图的方法是我会做的(你会在工厂模式实现中看到它)。您只是没有正确实例化该类:

Class classRef = classMap.get(someString);
SomeSuperClass classInstance = classRef.newInstance();
于 2012-05-07T18:44:44.297 回答