2017-08-02 4 views
0

Ich benutze einen Dienst, der mir ein CompleableFuture Versprechen zurückgibt, die Sache ist, ich kann nur auf seine Methoden durch Reflexion zugreifen, die gut funktioniert. Aber die Rückgabe des Versprechens zu behandeln, lässt mich erstaunt sein.ComplectableFuture verspricht & Java Reflection

Normalerweise würde man so etwas wie diese verwenden, um mit einem CompletableFuture zu arbeiten:

promise.thenApply(returnValue -> { 
       //do something with it 
      }); 

Wie man das mit Reflexion tun würde?

promise.getClass() 
       .getMethod("thenApply", ??) 
       .invoke(retorno, ??); 

Grundsätzlich mag ich eine Lambda-Funktion zu übergeben, die Rückkehr an meinem Versprechen zu behandeln, aber ich bin nicht sicher, wie es zu tun, und wenn es möglich ist, es zu tun.

+0

Warum verwenden Sie Reflektion anstelle eines normalen Methodenaufrufs? Und warum tust du das auf die Zukunft anstatt auf ihr Ergebnis? –

+0

Da die Klassen, die ich verwende, von einem anderen Klassenlader in einem OSGI-Kontext geladen werden, kann ich keinen direkten Zugriff darauf haben. –

+0

'CompletableFuture' ist Teil des JDK, daher sollte es vom selben übergeordneten Klassenlader geladen werden. Sie sollten also in der Lage sein, Ihr 'Versprechen' in' ComplectableFuture 'zu setzen und 'thenApply()' darauf zu verwenden, mit Reflektion innerhalb der übergebenen' Funktion ', falls erforderlich. –

Antwort

0

CompletableFuture ist Teil des JDK, daher wird es vom selben übergeordneten Klassenlader geladen.

Sie sollten also in der Lage sein, Ihr Versprechen zu CompletableFuture<?> zu werfen und thenApply() darauf, mit Reflexion innerhalb der übergebenen Function, wenn erforderlich.