この質問には既に回答がありますが、件名は ("型パラメーター T が型 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);
}