我想将ui-Classes分配给每个模型类.通过这个我想找到从用户界面存储日期的类.请不要参考设计,而是关于我HashMap的使用问题;-)
我知道这个类,HashMap但只使用它来将对象分配给其他对象.
如何设置始终将两个CLASSES相互链接?
public static final HashMap<class,class> componentMap=new HashMap<class, class>();
componentMap.put(ToolPanel.class, ToolComponent.class);
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用......
pol*_*nts 29
你想要一个Map<Class<?>, Class<?>>.
Class这里指的java.lang.Class是一种普通类型.除非你有更多的特定边界,否则<?>可以使用无界通配符(参见Effective Java 2nd Edition,Item 23:不要在新代码中使用原始类型)
请注意,interface Map此处使用的是代替特定实现HashMap(请参阅Effective Java 2nd Edition,Item 52:通过其接口引用对象).
请注意,Map<Class<?>, Class<?>>仍然会映射对象,但现在这些对象的类型Class<?>.尽管如此,它们仍然是物体.
类文字是一个表达式,由
class[...]后跟a.和令牌的名称组成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>)
Run Code Online (Sandbox Code Playgroud)
如您所见,通用编译时类型安全机制将阻止String.class被用作密钥,因为String没有extends Number.
本来应该是:
HashMap<Class,Class>
Run Code Online (Sandbox Code Playgroud)
(大写C)
或更好:
HashMap<Class<?>,Class<?>>
Run Code Online (Sandbox Code Playgroud)