Java-Methode, die eine Instanz von ClassT zurückgibt, erweitert Somethng

8

Ich habe diesen Code:

%Vor%

MyScrapper ist eine Klasse, die Scrapper interface implementiert. Warum funktioniert das nicht? Ich bekomme den folgenden Fehler in JDK7:

%Vor%

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?

    
Yervand Aghababyan 24.04.2012, 22:48
quelle

1 Antwort

10

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.

    
ColinD 24.04.2012, 22:59
quelle

Tags und Links