Intereting Posts
Mockito с тестированием асинхронного тестирования Kotlin Как изменить имя свойства Kotlin в соответствии с полем в базу данных Firebase Как отсортировать LinkedHashMap по значениям в Kotlin? NoClassDefFoundError okhttp3.internal.io.FileSystem Упрощение кода, который является одинаковым удовольствием, за исключением подписи (varargs vs map) Внедрение в Kotlin – метод Значение по умолчанию Как высмеять функцию верхнего уровня в котлине с помощью jmockit Мне нужно перезапустить IDE для запуска тестов Kotlin: Как я могу использовать делегированные свойства в Java? Является ли `foo as? Foo` полный эквивалент `foo as Foo?` В kotlin? Kotlin & Hibernate IllegalArgumentException: Не удается установить поле Строка Job.name для задания Изменчивый двумерный массив в Котлине IllegalAccessError при использовании Instant Run с Kotlin Как: стрелять и забывать асинхронные сопрограммы в Котлине Jacoco сообщает об 0 охвате классов Kotlin модульными тестами, в Android-проекте

Интерфейс реализации класса Kotlin anonim

Мой интерфейс 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?

Solutions Collecting From Web of "Интерфейс реализации класса Kotlin anonim"

пожалуйста, не используйте IRunnable такое именование в kotlin.

Как и в этом вопросе Как kotlin делает setOnClickListener принимать функции как описанные параметры , Kotlin делает SAM только для интерфейсов 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() }