【发布时间】:2016-03-11 23:20:24
【问题描述】:
很难解释我在这里想要达到的目标(所以......抱歉,如果我在搜索中错过了一个明显的答案)......
我正在尝试基于与 HashMap 中的值配对的类动态实例化对象。但是,我一直在寻找一种真正有效的方法时遇到问题。目前,我正在做这样的事情:
HashMap<String, Flag<?>> flags = new HashMap<String, Flag<?>>();
HashMap<String, Class> keys = new HashMap<String, Class>();
keys.put("test", BooleanFlag.class);
keys.put("thing", StringFlag.class);
keys.put("foo", DoubleFlag.class);
for (Map.Entry<String, Class> key : keys.entrySet()) {
try {
Class c = key.getValue();
Object obj = c.getConstructor(String.class, String.class).newInstance(key.getKey(), "test value that will be checked and coerced by one of the flag classes");
flags.put(key.getKey(), c.cast(obj));
} catch (Exception ex) {
//exception handling
}
}
在该方法的当前化身中,c.cast(obj) 会抛出一个编译器错误,说明在期望标志的位置找到了一个对象。我是不是要解决这个可怕的错误/这可能吗?
【问题讨论】:
-
为什么不存储 Builder 对象而不是 BooleanFlag。 BuilderObject 可以知道它应该创建什么类型,并且您不需要强制转换。或者有一个工厂来创建你的对象并将密钥作为标志传递给你做什么?
标签: java