我的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 })
任何想法,如何在kotlin中实现接口,如java?
答案 0 :(得分:2)
请不要在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()
}