En este ejemplo simplificado, tengo una clase genérica y un método que devuelve un Mapa independientemente del parámetro de tipo. ¿Por qué el compilador borra los tipos en el mapa cuando no especifico un tipo en la clase contenedora?¿Por qué este código java genérico no se compilará?
import java.util.Map;
public class MyClass<T>
{
public Map<String, String> getMap()
{
return null;
}
public void test()
{
MyClass<Object> success = new MyClass<Object>();
String s = success.getMap().get("");
MyClass unchecked = new MyClass();
Map<String, String> map = unchecked.getMap(); // Unchecked warning, why?
String s2 = map.get("");
MyClass fail = new MyClass();
String s3 = fail.getMap().get(""); // Compiler error, why?
}
}
Aparece el error de compilación.
MyClass.java:20: incompatible types
found : java.lang.Object
required: java.lang.String
String s3 = fail.getMap().get(""); // Compiler error
¿Cuál es el texto exacto de la advertencia no marcada? – Powerlord
advertencia: [desmarcado] conversión sin marcar –