java - HashMap 用于类,而不是对象

标签 java

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

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

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

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

上面的代码不工作...

最佳答案

你想要一个 Map<Class<?>, Class<?>>

这里的 Class 指的是 java.lang.Class ,是一个泛化类型。除非您有更具体的界限,否则可以使用无界通配符 <?>(请参阅Effective Java 2nd Edition,第 23 项:不要在新代码中使用原始类型)

请注意,这里使用 interface Map 而不是特定的实现 HashMap(参见Effective Java 2nd Edition,第 52 项:通过接口(interface)引用对象)。

注意 Map<Class<?>, Class<?>> 仍然映射对象,但是那些对象的类型现在是 Class<?> 。尽管如此,它们仍然是对象。

另见

相关问题


使用有界通配符施加限制

这是一个使用有界通配符来获得 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

另见

关于java - HashMap 用于类,而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456491/

相关文章:

java - 查找默认计算器(跨平台)

java - JRadioButton被选择后消失

java - 通过标准 SDK 在 Android 8 上显示应用程序图标徽章

java - 在 Java 中,如何使用正则表达式检查字符串是否包含两个字母和可变数量的数字?

Java优先级队列排序

java - 将大文件插入 Google 驱动器时出现 IOException "insufficient data written"

java - 如何模拟一个方面

javascript - 从原始字符串形成树或节点

java - 使用 Spring AMQP 出站网关发送消息 header

java - 保护客户端代码