A pesar de que esta pregunta ya está contestada, ya que la línea de asunto se trata ("El parámetro de tipo T está ocultando el tipo T "), solo quiere agregar que esta advertencia no siempre significa que hay una clase o un tipo real" T "declarado en algún lugar de la classpath (o inner class) como sugieren todas las respuestas/comentarios.
considerar lo siguiente:
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();
}
}
Debido K, V es declarada a nivel de clase, el método añadir también "hereda" la misma. Entonces terminas recibiendo la misma advertencia.
A continuación elimina el error de advertencia y el compilador por supuesto
public <E,F> void add(K key ,V value){
_concurrentMap.put(key, value);
}
Y mi método original es esto.(No requieren tipos genéricos adicionales para mi método)
public void add(K key ,V value){
_concurrentMap.put(key, value);
}
En mi caso, Eclipse había importado automáticamente 'org.apache.poi.ss.formula.functions.T', lo que provocó la advertencia. –