Ich habe ein Y-Kombinator-Problem gelöst. Gerade jetzt habe ich festgestellt, dass ich einen generischen Parameter nicht rekursiv referenzieren kann.
%Vor%zum Beispiel:
%Vor% Q : Wie kann ich generische Parameter in der Methode g
verwenden, um die Einführung einer zusätzlichen Schnittstelle G
zu vermeiden, und der generische Parameter sollte die UNCHECKED
Warnungen vermeiden?
Vielen Dank im Voraus.
Sie können eine generische Methode mit einer rekursiven Typdefinition deklarieren
%Vor% Was nicht funktioniert, ist, diese Methode mit einem Lambda-Ausdruck aufzurufen und den Lambda-Ausdruck G
zuzuordnen. Die Spezifikation sagt
15.27.3. Art eines Lambda-AusdrucksEin Lambda-Ausdruck ist in einem Zuweisungskontext, Aufrufkontext oder Casting-Kontext mit einem Zieltyp T kompatibel, wenn T ein funktionaler Schnittstellentyp ist (§9.8) ...
und G
ist keine funktionale Schnittstelle, sondern ein Typparameter, und es gibt keine Möglichkeit, hier auf einen tatsächlichen Schnittstellentyp für G
zu schließen.
Das funktioniert immer noch, wenn Sie die tatsächliche Schnittstelle G
für den Lambda-Ausdruck verwenden:
oder
%Vor% Also ist die Methode g
generisch ohne Abhängigkeit von der Schnittstelle G
, aber die Schnittstelle muss immer noch als Zieltyp für den Lambda-Ausdruck verwendet werden.
Tags und Links java java-8 generics functional-programming