Почему нельзя использовать kotlin.Result в качестве возвращаемого типа? - PullRequest
0 голосов
/ 03 октября 2018

Я создал метод, и возвращаемое значение равно Result<R> в классе MyClass<R>, но сообщение об ошибке «kotlin.Result» не может использоваться в качестве возвращаемого типа

I 'Мы также изучили исходный код Result для некоторых подсказок;почему это так?

Тестовый код (используется v. 1.3-RC).

class MyClass<R>(val r:R){
    fun f():Result<R>{ // error here
        return Result.success(r)
    }
}

fun main(args: Array<String>) {
    val s = Result.success(1)
    val m = MyClass(s)   
}

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018
android {
    kotlinOptions {
        freeCompilerArgs = ["-Xallow-result-return-type"]
    }
}

Если вы используете Android это решение для gradle

0 голосов
/ 08 июня 2019

При использовании maven:

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <configuration>
        <jvmTarget>1.8</jvmTarget>
        <args>
            <arg>-Xallow-result-return-type</arg>
        </args>
    </configuration>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>

При использовании gradle:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = ["-Xallow-result-return-type"]


}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = ["-Xallow-result-return-type"]
}

Источник: http://rustyrazorblade.com/post/2018/2018-12-06-kotlin-result/

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

Из Kotlin KEEP :

Обоснование этих ограничений заключается в том, что будущие версии Kotlin могут расширять и / или изменять семантику функций, которые возвращают тип результата и ноль-операторы безопасности могут изменять свою семантику при использовании значений типа Result.Чтобы не нарушать существующий код в будущих выпусках Kotin и оставить дверь открытой для этих изменений, соответствующее использование теперь выдает ошибку.Исключения из этого правила сделаны для тщательно проверенных объявлений в стандартной библиотеке, которые являются частью самого API типа Result.

Примечание: если вы просто хотите поэкспериментировать с типом Result, вы можетеобойти это ограничение, предоставив аргумент компилятора Kotlin -Xallow-result-return-type.

...