2017-10-14 10 views
0

私はむしろKotlinには新しく、まだそれを把握しようとしています。
だが、私はこのインタフェースを持っているとしましょう:オブジェクトkotlinのメソッドを実行

interface A{ 
    fun add() 
} 

私はこのインタフェースを実装する関数と何かを持っている:

fun main(args:Array<String>){ 
    op(A::add) 
} 

val calc = /*Something that implements interface A*/ 
fun op(func:()->Unit){ 
     //Some code 
} 

は最後に、私の主な機能には、私はこれを持っています

機能opには、指定された機能を実行する方法がありますか?calc?私はあなたがこのような何かを書きたいと思う

+0

'op(A :: add)'を 'op(calc :: add)'に変更しました。 – BakaWaii

答えて

0

(与えられた関数が存在すると仮定すると):

interface A{ 
    fun add() 
} 

class AImpl: A { 
    override fun add() { 
     println("Hello, Aimpl") 
    } 
} 

val calc = AImpl() 
fun op(func: A.()->Unit){ 
    calc.func() 
} 

fun main(args: Array<String>) { 
    op(A::add) 
} 

これはKotlinにおけるレシーバとリテラル機能と呼ばれています。関連ドキュメントは次のとおりです。https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver

この場合、Aオブジェクトで呼び出すことができるパラメータとしてラムダ関数を提供します。関数opでは、このメソッドをther calcオブジェクトで呼び出します。

関連する問題