Vorbereitung für OCPJP 6 Prüfung (deshalb verwende ich Java 1.6 Compiler) Ich habe etwas Unklares über Java Generics bemerkt. Betrachten Sie den folgenden Code ein:Java generischer Typparameter nicht innerhalb seiner Grenzen
class A<K extends Number> {
public <V> V useMe1(A<? super V> a) { // OK
return null;
}
public <V> V useMe2(A<? extends V> a) { // OK
return null;
}
public <V> V useMe3(A<V> a) { // ERROR, but why, since 2 above were ok
return null;
}
}
Wenn ich versuche, den Code (mit 1,6-Compiler) zu kompilieren, erhalte ich die Fehlermeldung:
type parameter V is not within its bound
Trotz Unbrauchbarkeit des Codes oben, ich frage mich, warum Compiler denken, dass die Typen <? super V>
und <? extends V>
die Klassengebundenheit übereinstimmen, aber <V>
ist nicht (da V diese beiden Grenzen übereinstimmt).
Ich werde diesen Code nicht ändern, ich will es verstehen. Der Code wird von der Beispiel-OCPJP 6-Prüfungsfrage genommen, die fragt: "Welche Zeile wird kompiliert?"
'useMe2' kompiliert nicht mit Java 8. – assylias
Der zweite kompiliert nicht entweder: / –