次のJavaクラスがあるとしましょう。
public class A {
public Result method1(Object o) {...}
public Result method2(Object o) {...}
...
public Result methodN(Object o) {...}
}
次に、私のKotlinコードで:
fun myFunction(...) {
val a: A = ...
val parameter = ...
val result = a.method1(parameter) // what if i want methodX?
do more things with result
}
そして、どのmethodXが内部で呼び出されるかを選択できるようにしたいmyFunction
。JavaではA::method7
、引数として渡して呼び出します。Kotlinではコンパイルされません。Kotlinでどのように解決すればよいですか?
Kotlinでメソッド参照を渡すこともできます(反射である重いハンマーは必要ありません)。
fun myFunction(method: A.(Any) -> Result) {
val a: A = ...
val parameter = ...
val result = a.method(parameter)
do more things with result
}
myFunction(A::method1)
myFunction {/* do something in the context of A */}
これmethod
はの一部として宣言されA
ます。つまり、通常のobject.method()
表記で呼び出すことができます。これは、メソッド参照構文を使用したJustWorks™です。
同じ呼び出し構文で機能するが、A
より明確にする別の形式もあります。
fun myFunction(method: (A, Any) -> Result) { ... }
myFunction(A::method1)
myFunction {a, param -> /* do something with the object and parameter */}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加