我想将ui-Classes分配给每个模型类。通过这个我想找到从用户界面存储日期的类。请不要参考设计,而是参考HashMap
使用的问题; - )
我知道类HashMap
,但只用它来将对象分配给其他对象。
如何设置始终将两个CLASSES相互链接?
public static final HashMap<class,class> componentMap=new HashMap<class, class>();
componentMap.put(ToolPanel.class, ToolComponent.class);
上面的代码不起作用......
答案 0 :(得分:29)
您需要Map<Class<?>, Class<?>>
。
Class
这里指的是java.lang.Class
,这是一种普通类型。除非你有更多的特定边界,否则可以使用无界通配符<?>
(参见 Effective Java 2nd Edition,第23项:不要在新代码中使用原始类型)
请注意,此处使用的是interface Map
,而不是特定的实现HashMap
(请参阅 Effective Java 2nd Edition,Item 52:通过接口引用对象)。< / p>
请注意,Map<Class<?>, Class<?>>
仍会映射对象,但这些对象的类型现在为Class<?>
。尽管如此,它们仍然是物体。
类文字是一个表达式,由
class
[...]后跟.
和令牌class
的名称组成。类文字C.class
的类型,其中C
是class
[...]的名称是Class<C>
。
以下是强制有界通配符的示例,其中Map
的键必须为Class<? extends Number>
,值可以为Class<?>
。
Map<Class<? extends Number>, Class<?>> map
= new HashMap<Class<? extends Number>, Class<?>>();
map.put(Integer.class, String.class); // OK!
map.put(Long.class, StringBuilder.class); // OK!
map.put(String.class, Boolean.class); // NOT OK!
// Compilation error:
// The method put(Class<? extends Number>, Class<?>)
// in the type Map<Class<? extends Number>,Class<?>>
// is not applicable for the arguments (Class<String>, Class<Boolean>)
如您所见,通用编译时类型安全机制会阻止String.class
被用作密钥,因为String
不会extends Number
。
答案 1 :(得分:3)
应该是:
HashMap<Class,Class>
(大写C)
或更好:
HashMap<Class<?>,Class<?>>
答案 2 :(得分:2)
声明应该是:
public static final HashMap<Class<?>, Class<?>> componentMap = new HashMap<Class<?>, Class<?>>();