2016-04-23 4 views
4

ich eine Java-Methode haben, die einen Method Parameter nimmt:Wie Sie einen Verweis auf eine Kotlin Funktion als eine Java-Methode

void doSomethingWithMethod(Method m) { 
    ... 
} 

Und ich habe eine Kotlin-Klasse, die eine Funktion enthält:

class MyClass { 

    fun myFunction() : List<Something> { 
     ... 
    } 

} 

Ich kann einen Verweis auf die Funktion mit MyClass::myFunction erhalten, aber ich sehe keinen Weg, es in die doSomethingWithMethod Methode zu übergeben. Gibt es eine Entsprechung zur .java-Eigenschaft, die auf eine Kotlin-Klassenreferenz angewendet werden kann, um ihr Java-Äquivalent zu erhalten?

Wenn nicht, gibt es einen Workaround?

Antwort

8
import kotlin.reflect.jvm.javaMethod 

val method = MyClass::myFunction.javaMethod 

Die javaMethod Eigenschaft ist nicht Teil der Standard Kotlin Bibliothek, sondern Teil der offiziellen kotlin-reflect.jar ist. Es kann mit der folgenden Abhängigkeit durch Maven hinzugefügt:

<dependency> 
     <groupId>org.jetbrains.kotlin</groupId> 
     <artifactId>kotlin-reflect</artifactId> 
     <version>${kotlin.version}</version> 
    </dependency> 
+0

Dank dafür. Die Eigenschaft javaMethod ist Teil der Datei kotlin-reflect.jar, die nicht mit der Standardbibliothek identisch ist. Obwohl mir bewusst war, dass es eine Reflektionsbibliothek gab, ließ mich die Tatsache, dass JavaClass Teil der Standardbibliothek war, davon ausgehen, dass JavaMethod auch wäre. – Rich