其他类中的实例泛型类

时间:2016-04-08 08:11:00

标签: java generics hashmap

我有两个班级

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)行?

那为什么会出现这个错误,我该如何解决?

1 个答案:

答案 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>> { ...