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 answersIch 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>
vonThingProducer
oder machengetThing
staticdeclarethingProducer ThingProducer<?>
anstelle des rohen TypsThingProducer
Ist das ein Compiler-Fehler? Wenn nicht, welche Regel in der JLS definiert dieses Verhalten?