Ausführen von Java 1.8 JavaSE-1.8 (jdk1.8.0_20)
Diese Klasse:
%Vor%gibt den Kompilierfehler:
Die Methode DoNothing () im Typ SimpleQuestion ist nicht anwendbar für die Argumente ()
Warum das und nicht DoNothing2,3 und 4?
Die Fehlermeldung scheint sich auf einen Fehler des in Abschnitt 18.5.1 der Spezifikation .
Für DoNothing geht der Algorithmus wie folgt vor (unter Verwendung der Terminologie aus dem obigen Link):
Die Typparameter sind
P1 = X
P2 = T extends Interface2<X> & Interface1
und ich werde a1 und a2 für die entsprechenden Inferenzvariablen verwenden.
Die anfängliche gebundene Menge ist
B0 = {a1 <: Object, a2 <: Interface2<a1>, a2 <: Interface1}
Es gibt keine Argumente, daher werden an dieser Stelle keine zusätzlichen Grenzen hinzugefügt (B2 = B0).
Es gibt eine Abhängigkeit von a2 auf a1, also versuchen wir zuerst a1 aufzulösen. Es hat eine richtige obere Grenze von Object, also instanziieren wir es dazu. Die Einbindung von a1 = Object
beinhaltet das Hinzufügen der gebundenen
a2 <: Interface2<Object>
Als nächstes lösen wir a2 auf. Dies hat jetzt zwei richtige obere Grenzen, also instanziieren wir a2 in ihr glb:
a2 = Interface2<Object> & Interface1
Jede Variable verfügt jetzt über eine Instanziierung, sodass die Auflösung erfolgreich war.
Daher sollte im Gegensatz zur Fehlermeldung der Aufruf von DoNothing anwendbar sein. Dies scheint ein Fehler in Ihrem Java-Compiler zu sein.
Tags und Links eclipse java java-8 generics multiple-inheritance