我有两个班级
class Key<T extends Comparable<T>> {// used for composite key for HashMap
private T q;
private T o;
@Override
public boolean equals(Object obj) {
...
}
@Override
public int hashCode() {
....
}
}
class A<Key,V, T> {
private LinkedHashMap<Key,V> map;
public A() {
... suppose we instance map and assign some example values for it here.
}
public foo (T q, T o) {
//From two element q and o, I want to instance a object Key k
//to check whether this key k is exist in the Map or not by using
//map.get(key).
Key k = new Key(q,o);
}
}
但是我收到了这个错误&#34;无法实例化类型Key&#34;在Key k = new Key(q,o)
行?
那为什么会出现这个错误,我该如何解决?
答案 0 :(得分:3)
Key
被声明为类A
中的类型变量。
class A<Key, V, T> { ...
^ Everything between <> are type variables
这意味着当您编写new Key
时,您正在尝试创建&#34;某些&#34;的实例。上课,不一定是你的Key
课程。由于类型擦除,实际类型在运行时是未知的。
假设您的意思是引用此处发布的Key
类,只需删除类型变量的声明:
class A<V, T> { ...
请注意,您也不应该使用原始类型:
private LinkedHashMap<Key<T>,V> map;
Key<T> k = new Key<>(q, o);
此外,您需要绑定T
以符合Key
上的约束,即它必须具有可比性:
class A<V, T extends Comparable<T>> { ...