Expliziter Methodentypparameter, der für einen Rohklassentyp ignoriert wird; Compiler-Fehler? [Duplikat

Diese Frage hat hier bereits eine Antwort:

Java generische Methoden in generischen Klassen 6 answers

Ich erhalte einen Compilerfehler beim Aufrufen einer generischen Methode mit expliziten Typparametern, als ob der explizite Typparameter nicht berücksichtigt worden wäre. Minimales Beispiel:

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 ist ein roher Typ, da die Klasse einen Typparameter hat, aber beim Aufrufen vongetThing wir verweisen nicht auf dasKlass type-Parameter, aber stattdessen das @ bereitstellMethod type Parameter. Nach meinem Verständnis der JLS sollte dies legal sein, aber es gibt mir diesen Fehler:

incompatible types: Object cannot be converted to ThingA

Der Fehler verschwindet, wenn ich

entferne das<S> vonThingProduceroder machengetThing staticdeclarethingProducer ThingProducer<?> anstelle des rohen TypsThingProducer

Ist das ein Compiler-Fehler? Wenn nicht, welche Regel in der JLS definiert dieses Verhalten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage