Dieser Fall scheint ein anderer zu sein, in dem der Java-Compiler von Eclipse javac vernichtet. Die einzige Frage ist für mich, ob es sich um einen Bug in JLS oder Javac handelt.Eine schlechte Interaktion zwischen selbstreferentiellen Typen und begrenzten Wildcards
interface EndoFunctor< C, FC extends EndoFunctor< C, FC > > { /*...*/ }
interface Algebra< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }
Die zweite Zeile stellt in Eclipse, aber nicht in javac mit der Meldung kompilieren, dass „Typ-Parameter FC nicht innerhalb seiner gebunden“.
FC wird deklariert, um EndoFunctor < zu erweitern? erweitert C, FC>, und die Grenze an FC ist, dass es EndoFunctor < D, FC> für die abgeleitete D erweitern, die in diesem Fall ist? erweitert C. Ich denke, javac erkennt nicht, dass der Platzhalter denselben unbekannten Typ in beiden Kontexten darstellt. Eclipse macht das zwar!
Offenbar folgende bekommt, um das Problem in javac:
interface EndoFunctor< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }
aber dies ist eine lockere Definition als ich für diese Schnittstelle werden soll.
konnte ich auch versuchen,
interface Algebra< C, D extends C, FC extends EndoFunctor< D, FC > >
aber dieser Ansatz zwingt mich überall durch, dass zusätzliche Parameter vom Typ D zu tragen.
Was ist zu tun?
Sie sagen nicht, welche Version von javac Sie verwenden. –
Entschuldigung. Das ist Java 1.6.0_31. –