Ошибка дженериков Java?

У нас будет следующая иерархия классов:

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.

11
задан Joachim Sauer 14 October 2011 в 12:19
поделиться