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