Почему runBlocking в main с сопрограммой не компилируется? - PullRequest
0 голосов
/ 25 января 2020

Используя kotlinc-jvm 1.3.61 и kotlinx-coroutines-core-1.3.3, следующий код не может быть скомпилирован.

import kotlinx.coroutines.*
fun main() = runBlocking {
    launch {}
}

с ошибкой

Error: Main method not found in class SomeExampleKt, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

однако , следующий код компилируется и запускается успешно.

import kotlinx.coroutines.*
fun main() = runBlocking {
    launch {}
    print("") // The only addition
}

Может кто-нибудь объяснить, почему добавление только оператора print позволяет компилировать?

1 Ответ

3 голосов
/ 25 января 2020

main функция не должна ничего возвращать (Unit). runBlocking возвращает последнее значение оператора, а launch возвращает Job, но print является функцией Unit. Указание типа возвращаемого значения может решить эту проблему.

import kotlinx.coroutines.*
fun main() = runBlocking<Unit> {
    launch {}
}
...