1

我一直在尝试创建一个HashMap包含 2 个键的自定义。用户使用两个参数KV. 该类由 2 个组成HashMaps:本机扩展<Integer, V>和密钥存储<K, Integer>。所以基本上,每个值都有 2 个键:KInteger.

当用户想要获取一个物品时,他可以使用Kkey或者Integerkey来获取。因此,例如,如果用户使用,K则系统会查找keyTable具有此类键的整数,然后使用它Integer来查找值V

public class KeyMap<K, V> extends ConcurrentHashMap<Integer, V> {

    private HashMap<K, Integer> keyTable = new HashMap<K, Integer>(10);

    @Override
    public V get(Object key) {
        if (key instanceof V) {
            return super.get(keyTable.get(key));
        }
        return super.get(key);
    }

}

但是,我以前从未进行过参数化,因此我无法理解问题所在 - 我正在Cannot perform instanceof check against type parameter V. Use instead its erasure Object instead since further generic type information will be erased at runtime上线if (key instanceof V) {

有没有可能实现我想要的系统?

4

1 回答 1

1

您不能在运行时执行的任何操作(例如instanceof运算符)中使用参数化类型(K 和 V)。在 Java 中,所有参数化信息都在编译时使用,然后基本上从编译代码中删除。这种删除称为类型擦除。1

我建议您不要依赖键的类型来确定要查看哪个 HashMap,而是查看该键是否是第一个 HashMap 的有效键,如果不是,请尝试第二个。请记住,K 可以是 Integer 类型,这意味着两种键类型可以相同。

于 2013-05-14T01:54:30.867 回答