【问题标题】:Kotlin anonim class implement interface [duplicate]Kotlin匿名类实现接口[重复]
【发布时间】:2016-12-27 02:38:52
【问题描述】:

我的 kotlin 界面:

interface IRunnable<T> {
    fun doWork(): T
}

然后我创建匿名类实现我的接口:

executor!!.execute(object : IRunnable<Long> {
    override fun doWork(): Long {
        return 0L
    }
})

如果是java接口,代码如下

 executor!!.execute(IRunnable2 { return@IRunnable2 0L })

有什么想法,如何像java一样在kotlin中实现接口?

【问题讨论】:

标签: kotlin


【解决方案1】:

请不要在 kotlin 中使用 IRunnable 这样的命名。

正如在这个问题How kotlin makes setOnClickListener accept functions as parameter 中描述的那样,Kotlin 仅针对 Java 接口执行 SAM。但是,您可以更改接口以支持函数类型,或实现接口,并使用它,如下例所示:

fun main(args: Array<String>) {
    class Executor {
        fun <T> execute(task: SimpleRunnable<T>): CompletableFuture<T> {
            return CompletableFuture.supplyAsync {
                task.doWork()
            }
        }
    }

    val executor = Executor()

    executor.execute(SimpleRunnableImpl { "42" })

    executor.execute(object : SimpleRunnable<Long> {
        override fun doWork(): Long {
            return 0L
        }
    })
}

interface SimpleRunnable<T> {
    fun doWork(): T
}

class SimpleRunnableImpl<T>(val task: () -> T) : SimpleRunnable<T> {
    override fun doWork(): T = task()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-01-19
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多