Как сериализовать лямбду в котлин - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь сериализовать лямбду, как в Java 8, которая выполняется следующим образом:

Runnable r = (Runnable & Serializable) () -> {doSomething ();};

но когда он пытается сделать то же самое в kotlin, как это:

val r = {doSomething ()} as (Runnable, Serializable)

я получаю ошибку компиляции:

enter image description here

, даже если я попытаюсь вставить код Java в файл kotlin, он удалит сериализованную часть преобразования.поэтому как сериализовать лямбду в котлин?

1 Ответ

0 голосов
/ 05 октября 2018

Лямбды Kotlin по умолчанию сериализуемы, см. https://discuss.kotlinlang.org/t/are-closures-serializable/1620.

Так что это будет работать:

 val r = { println("Hallo")} as java.io.Serializable

Если вам действительно нужен Runnable, то это не работает, потому что Kotlin создает толькоRunnable экземпляр:

 val r = Runnable { println("Hallo")} as java.io.Serializable

В этом случае вы должны явно создать объект:

val r = object: Runnable, java.io.Serializable {
    override fun run() :  Unit {
        println("Hallo")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...