Wie referenziere ich einen generischen Parameter?

9

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.

    
holi-java 26.07.2017, 20:54
quelle

1 Antwort

4

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-Ausdrucks      

Ein 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:

%Vor%

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.

    
Holger 27.07.2017, 19:03
quelle