Kotlin anonim类实现接口

Kotlin anonim类实现接口,kotlin,Kotlin,My kotlin接口: interface IRunnable<T> { fun doWork(): T } executor!!.execute(object : IRunnable<Long> { override fun doWork(): Long { return 0L } }) 任何想法,如何在kotlin中像java一样实现接口?请不要在kotlin中使用IRunnable这样的命名 正如在这个问题中所描述的,K

My kotlin接口:

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

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

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

正如在这个问题中所描述的,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()
}
fun main(args:Array){
类执行器{
乐趣执行(任务:SimpleRunnable):CompletableFuture{
返回CompletableFuture.SupplySync{
task.doWork()
}
}
}
val executor=executor()
execute(SimpleRunnableImpl{“42”})
executor.execute(对象:SimpleRunnable{
覆盖有趣的doWork():长{
返回0升
}
})
}
接口SimpleRunnable{
有趣的工作
}
类SimpleRunnableImpl(val任务:()->T):SimpleRunnable{
重写fun doWork():T=task()
}
如果使用Java创建接口,并且使用一种方法,则可以使用Kotlin中的快捷方式。就这样。如果在Kotlin中定义接口,则必须扩展该接口。最短的方法是用Java定义接口,然后继续。
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()
}