我正在做一些实验,试图了解有关返回泛型的问题。以下程序运行时没有错误,并在最后打印“FOO gets BAR”。谁能解释为什么? GetMap() 成员不安全地将 HashMap
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GenericTrial
{
public static <K,V> Map<K,V> GetMap()
{
return (Map<K,V>)new HashMap<Integer,Integer>();
}
public static void main(String[] args)
{
try
{
Map<String,String> m = GetMap();
m.put("FOO", "BAR");
System.out.println("FOO gets " + m.get("FOO"));
}
catch (Exception e)
{
System.out.println("Got exception");
}
}
}
最佳答案
因为Java的type erasure ,在运行时 Map<K, V>
之间没有区别和一个 Map<T, U>
.
泛型类型纯粹是编译时概念。
关于java - 如何安全地返回通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168208/