Wie kann eine Methodenreferenz in Java 8 indirekt ausgeführt werden?

8

Die allgemeinen Fragen sind:

  • Kann die Syntax object::aMethod in einen Typ wie MethodHandle als funktionale Schnittstelle konvertiert werden?
  • Wenn nein, wie kann eine Methodenreferenz in Java 8, wenn überhaupt möglich, indirekt aufgerufen werden?

Stellen Sie sich als Beispiel vor, wir hätten gerne ein MethodRefRunner als:

%Vor%

Und es kann wie folgt verwendet werden: MethodRefRunner.execute(o, o::someMethod, someParam)

Im obigen Snippet ist eine Option für WHATTYPE java.util.function.Function , aber sehr restriktiv. Als diese Antwort erwähnt, war vor der Version b75 ein java.util.function.Block verfügbar und könnte nützlich sein.

>

Auf der anderen Seite könnte jede Chance, dass WHATTYPE irgendwie in ein java.lang.invoke.MethodHandle umgewandelt werden?

Hinweis für Java-Experten: Bitte verfeinern Sie den Titel der Fragen nach Bedarf.

    
nobeh 17.06.2013, 08:16
quelle

2 Antworten

8

Ich glaube nicht, dass es irgendeinen Weg gibt, das zu tun, was Sie wollen. WHATTYPE muss eine funktionale Schnittstelle sein - nicht unbedingt Function , sondern eine, deren einzelne abstrakte Methode mit somemethod übereinstimmt. Es ist ein gewöhnlicher Schnittstellentyp, der den üblichen Regeln für Java-Typen unterliegt. java.util.function.Block war ein gewöhnlicher Interface-Typ wie dieser und nicht besonders in der Art, wie du denkst. (Es ist übrigens immer noch bei Consumer .)

    
Maurice Naftalin 17.06.2013, 11:25
quelle
5

Eine Methodenreferenz funktioniert genau wie ein Lambda und hat wie ein Lambda keinen "Typ" für sich. Sein Typ hängt vom Kontext ab, in dem er verwendet wird. Deine Frage macht also keinen Sinn. Wenn Sie die Methodenreferenz in einem Aufruf dieser MethodRefRunner.execute() -Methode verwenden, ist der Typ der Methodenreferenz eine Instanz von WHATTYPE (was auch immer das ist), denn das war die Methode erklärt zu akzeptieren. Wenn Sie es von woanders haben, dann wird dieser Ort wissen, um welchen Typ es sich handelt.

    
newacct 17.06.2013 23:40
quelle

Tags und Links