让我们有以下类层次结构:
public class MyType {
}
public class MySuperclass<T extends MyType> {
protected Map<String, String> myMap = new TreeMap<String, String>();
protected String myMethod(String s) {
return myMap.get(s);
}
}
public class MySubclass extends MySuperclass {
@Override
protected String myMethod(String s) {
return myMap.get(s); // <-- compilation error
}
}
为什么在overriden方法中存在编译错误 MySubclass
?
错误消息是“类型不匹配:无法从对象转换为字符串”。
有趣的是,如果我为其定义泛型类类型,编译错误就会消失 MySuperclass
在 MySubclass
定义:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
有人可以解释这种行为吗?我认为这是一个Java编译器错误。
我正在使用jdk1.6.0_24。