HashMap用于类,而不是对象

ker*_*rrl 16 java

我想将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<?>.尽管如此,它们仍然是物体.

也可以看看

相关问题


对有界的wilcards施加限制

这是一个强加有界通配符的示例,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.

也可以看看

  • @kerrl - `Map <Class <?扩展ClassR>,Class <?扩展了ClassB >>` (3认同)

Eya*_*der 3

本来应该是:

HashMap<Class,Class>
Run Code Online (Sandbox Code Playgroud)

(大写C)

或更好:

HashMap<Class<?>,Class<?>>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的答复。Class&lt;?&gt; 与 Class 有什么不同,泛型的效果是什么? (2认同)