In questo esempio semplificato ho una classe generica e un metodo che restituisce una mappa indipendentemente dal parametro type. Perché il compilatore cancella i tipi sulla mappa quando non si specifica un tipo nella classe contenitore?Perché questo codice Java generico non viene compilato?
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?
}
}
Viene visualizzato questo errore del compilatore.
MyClass.java:20: incompatible types
found : java.lang.Object
required: java.lang.String
String s3 = fail.getMap().get(""); // Compiler error
Qual è il testo esatto dell'avviso non controllato? Avviso – Powerlord
: [deselezionato] conversione deselezionata –