让我们有以下类层次结构:
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
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在overriden方法中存在编译错误MySubclass?错误消息是"类型不匹配:无法从对象转换为字符串".
有趣的是,如果我MySuperclass在MySubclass定义中定义泛型类类型,则编译错误消失了:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种行为吗?我认为这是一个Java编译器错误.
我正在使用jdk1.6.0_24.
mic*_*667 12
这不是一个bug.通过扩展MySuperclass而不是MySuperclass<MyType>,你扩展原始类型 MySuperclass,这意味着它myMap也将是类型Map而不是Map<String, String>.
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |