HashMap用于类,而不是对象

时间:2010-08-11 08:11:04

标签: java

我想将ui-Classes分配给每个模型类。通过这个我想找到从用户界面存储日期的类。请不要参考设计,而是参考HashMap使用的问题; - )

我知道类HashMap,但只用它来将对象分配给其他对象。

如何设置始终将两个CLASSES相互链接?

public static final HashMap<class,class> componentMap=new HashMap<class, class>();
componentMap.put(ToolPanel.class, ToolComponent.class);

上面的代码不起作用......

3 个答案:

答案 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<?>。尽管如此,它们仍然是物体。

另见

相关问题


对有界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>)

如您所见,通用编译时类型安全机制会阻止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<?>>();