2017-10-14 33 views
0

我对Kotlin相当陌生,我仍然试图去掌握它。
比方说,我有这样的接口:对象kotlin的执行方法

interface A{ 
    fun add() 
} 

我有一个功能,东西实现了这个接口:

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

最后,在我的主要功能,我有这样的:

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

有没有一种方法使功能op使用val 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) 
} 

这就是所谓的函数文本,接收机在科特林。相关文档位于:https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver

在这种情况下,您提供了一个Lambda函数作为可以在任何A对象上调用的参数。在函数op中,我将这个方法称为calc对象。