Ich habe diesen Code:
%Vor% MyScrapper
ist eine Klasse, die Scrapper
interface implementiert. Warum funktioniert das nicht? Ich bekomme den folgenden Fehler in JDK7:
P.S. Ich habe ehrlich versucht, nach ganzen 30-40 Minuten zu suchen.
Aktualisierung:
Wenn ich die Methode als public Class<? extends Scrapper> getScrapper() {
deklariere, funktioniert es. aber ich verstehe immer noch nicht, warum die ursprüngliche Deklaration nicht kompiliert wurde. Was ist daran falsch?
Bei einer generischen Methode wie getScrapper()
bestimmt der Aufrufer der Methode, was das eigentliche Argument für die Methode ist ( T
in diesem Fall). Der Aufrufer könnte einen beliebigen Untertyp von Scrapper
als T
auswählen, und Ihre Methode (die immer MyScrapper.class
zurückgibt) würde nicht die korrekte Klasse zurückgeben.
Wenn die Methode aufgerufen wird, erwartet der Aufrufer dieser Methode Folgendes:
%Vor% Wenn Sie die Methode so ändern, dass Class<? extends Scrapper>
zurückgegeben wird, ist sie keine generische Methode mehr ... Es gibt keine Typparameter für den Aufrufer. Stattdessen besagt die Signatur, dass die Methode das Klassenobjekt für einen unbekannten Subtyp von Scrapper
zurückgibt und MyScrapper.class
die Rechnung dafür berücksichtigt.