Nur um sauas Antwort etwas zu erweitern ...
In Java 5 wurde die Methode wie folgt deklariert:
%Vor%In Java 6 wird die Methode wie folgt deklariert:
%Vor% Der Platzhalterunterschied ist sehr wichtig - denn List<DocFeeder>
ist ein Collection<? extends Callable<T>>
, aber es ist nicht a Collection<Callable<T>>
. Überlegen Sie, was mit dieser Methode passieren würde:
Das ist legal - aber es ist eindeutig schlecht, wenn Sie addSomething
mit einem List<DocFeeder>
aufrufen können, da versucht wird, einen Nicht-DocFeeder zur Liste hinzuzufügen.
Wenn Sie also mit Java 5 festgefahren sind, müssen Sie List<Callable<Boolean>>
von Ihrem List<DocFeeder>
erstellen.
Dieser Code kompiliert perfekt mit Java 6, aber kompiliert nicht mit Java 5
%Vor% Allerdings ändert sich die list
folgendermaßen:
Funktioniert auf Java 5 und Java 6.
Danke für die ausführliche Antwort, aber es stört mich immer noch - Callable ist eine Schnittstelle, also eigentlich sollte die "addSomething" -Funktion in Jons Antwort in Ordnung sein (nicht nur legal, sondern vernünftig) - denn, nun, das ist das Ganze Point of Interfaces - Solange Sie eine erste Übereinstimmung einhalten, ist mir egal, welches Objekt Sie der Liste hinzufügen würden. Imo, das Problem, das Sie vorgestellt haben, sollte in einem anderen Bereich behandelt werden.
Abgesehen davon bleibt die Tatsache bestehen, dass der Code nicht kompiliert wurde - und er sollte ...
habenTags und Links java executorservice callable