为什么这个通用java代码不会编译?
在这个简化的例子中,我有一个泛型类,以及一个返回Map而不管类型参数的方法。当我没有在包含类上指定类型时,为什么编译器会清除地图上的类型?
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? }}
我得到这个编译错误。
MyClass.java:20: incompatible types found : java.lang.Objectrequired: java.lang.String String s3 = fail.getMap().get(""); // Compiler error
茅侃侃
达令说
相关分类