Intereting Posts
Запустить один класс kotlin с основной функцией в студии android Невозможно использовать имена меток, отобранных по методу Kotlin, в androidTest – исключение для дескриптора Как создать переменную функции с переменным числом аргументов? Как получить делегированный экземпляр в Котлин? Apache FOP 2.2 Включить шрифты, используя относительный путь Выделите несколько элементов в представлении списка андроида при выборе Kotlin не может вывести тип при использовании ссылки метода в Flowable Не могу построить проект с Android Studio 2.3 и Gradle Использование @ EnableNeo4jRepositories (basePackageClasses = "myApp") в Котлине Преобразование процедурных методов стиля в функциональный стиль Комната (AAC): Ошибка SQL или отсутствующая база данных (рядом с «group»: синтаксическая ошибка) Файл Kotlin в собственном проекте iOS с Kotlin / Native Зачем нужен репозиторий и сервис + контракт Тесты Kotlin и android lint Kotlin: Как получить и установить текст в TextView на Android с помощью Kotlin?

Интерфейс реализации класса 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() }