Явный параметр типа метода игнорируется в необработанном типе класса; ошибка компилятора? [Дубликат]

На этот вопрос уже есть ответ здесь:

Обобщенные методы Java в обобщенных классах 6 ответов

Я получаю сообщение об ошибке компилятора при вызове универсального метода с явными параметрами типа, как если бы явный параметр типа не был принят во внимание. Минимальный пример:

class CastExample {
    static class ThingProducer<S> {
        public <T> T getThing() { return null; }
    }

    static class ThingA {}

    public static void main(String... args) {
        ThingProducer thingProducer = new ThingProducer();
        ThingA thingA = thingProducer.<ThingA>getThing(); // compile error here
    }
}

ThingProducer является необработанным типом, так как класс имеет параметр типа, но при вызовеgetThing мы не ссылаемся научебный класс введите параметр, но вместо этого предоставляяметод параметр типа. Согласно моему пониманию JLS, это должно быть законно, но это дает мне эту ошибку:

incompatible types: Object cannot be converted to ThingA

Ошибка исчезнет, ​​если я

удалить<S> отThingProducerили сделатьgetThing статическийобъявлятьthingProducer ThingProducer<?> вместо необработанного типаThingProducer

Это ошибка компилятора? Если нет, какое правило в JLS определяет это поведение?

Ответы на вопрос(2)

Ваш ответ на вопрос