即使这个问题已经回答了,因为主题行是关于 ("The type parameter T is hidden the type T") ,只是想补充一点,这个警告并不总是意味着有一个类或实际类型“T”正如所有答案/评论所建议的那样,在类路径(或内部类)中的某处声明。
考虑以下:
public class Cache<K extends Comparable<K>,V> {
private final ConcurrentHashMap<K,V> _concurrentMap = new ConcurrentHashMap<K,V>();
public <K,V> void add(K key ,V value){ // Compiler warning - The type parameter V is hiding type V (as also for K)
_concurrentMap.put(key, value); //Compiler error - K and V passed to add are now being considered different
//from whats declared for _concurrentMap variable
}
public V get(K key){
return _concurrentMap.get(key);
}
public int size(){
return _concurrentMap.size();
}
}
因为 K ,V 是在类级别声明的,所以方法 add 也“继承”它。所以你最终会得到同样的警告。
下面当然删除了警告和编译器错误
public <E,F> void add(K key ,V value){
_concurrentMap.put(key, value);
}
而我原来的方法是这样的。(我的方法不需要额外的泛型类型)
public void add(K key ,V value){
_concurrentMap.put(key, value);
}