2016-04-08 4 views
1

У меня есть два классаInstance общий класс в другой класс

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); 
} 
} 

Но я получил эту ошибку «Невозможно создать ключ типа» на линии Key k = new Key(q,o)?

Так почему же эта ошибка возникла и как ее решить?

ответ

3

Key объявляется переменной типа в классе A.

class A<Key, V, T> { ... 
     ^Everything between <> are type variables 

Это означает, что когда вы пишете new Key, вы пытаетесь создать экземпляр «некоторого» класса, не обязательно ваш 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>> { ... 
Смежные вопросы