我一直在尝试创建一个包含2个密钥的自定义HashMap
。
用户使用两个参数K
和V
创建我的类的对象。该课程由2 HashMaps
组成:本机扩展<Integer, V>
和密钥存储<K, Integer>
。
基本上,每个值有2个键:K
和Integer
。
当用户想要获取某个项目时,他可以使用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) {
。
甚至可以实现我想要的系统吗?
答案 0 :(得分:1)
在运行时执行的任何操作(例如instanceof
运算符)中都不能使用参数化类型(K和V)。在Java中,所有参数化信息在编译时使用,然后基本上从编译的代码中删除。这种删除被称为类型擦除。 1
我建议您不要依赖键的类型来确定要查看哪个HashMap,而是查看该键是否是第一个HashMap的有效键,如果不是,请尝试第二个。请记住,K可以是Integer类型,这意味着两种键类型都可以相同。