У нас будет следующая иерархия классов:
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
}
}
Почему возникает ошибка компиляции в замещающем методе MySubclass
? {{1 }} Сообщение об ошибке: «Несоответствие типов: невозможно преобразовать из объекта в строку».
Интересно то, что ошибка компиляции исчезает, если я определяю тип универсального класса для MySuperclass
в определении MySubclass
:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
Может ли кто-нибудь объяснить такое поведение? Я бы счел это ошибкой компилятора Java.
Я использую jdk1.6.0_24.