创建自定义多键HashMap

时间:2013-05-13 20:14:22

标签: java hashmap extend

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

当用户想要获取某个项目时,他可以使用K密钥或Integer密钥检索这两个项目。因此,例如,如果用户使用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) {

甚至可以实现我想要的系统吗?

1 个答案:

答案 0 :(得分:1)

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

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