'kotlin.Result'를 반환 유형으로 사용할 수없는 이유는 무엇입니까?


84

메서드를 만들었고 반환은 Result<R>의 클래스에 MyClass<R>있지만 오류 메시지는 'kotlin.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)   
}

오류를 일으키는 코드를 보여주세요. 어디 kotlin.Result에서 왔습니까? 표준 라이브러리 에서 해당 클래스를 찾을 수 없습니다 .
Jesper

1.3 이상 코 틀린 시도
ersin-ertan

답변:


60

로부터 코 틀린의 KEEP :

이러한 제한의 근거는 Kotlin의 향후 버전이 Result 유형을 반환하는 함수의 의미를 확장 및 / 또는 변경할 수 있으며 null-safety 연산자가 Result 유형의 값에 사용될 때 의미를 변경할 수 있다는 것입니다. Kotin의 향후 릴리스에서 기존 코드가 깨지는 것을 방지하고 이러한 변경 사항에 대한 문을 열어두기 위해 해당 사용은 지금 오류를 생성합니다. 이 규칙에 대한 예외는 결과 유형 API 자체의 일부인 표준 라이브러리에서 신중하게 검토 된 선언에 적용됩니다.

참고 :Result 유형 을 실험하려는 경우 Kotlin 컴파일러 인수를 제공하여이 제한을 우회 할 수 있습니다 -Xallow-result-return-type.

자바 또는 Android 프로젝트에서 Gradle을 사용하는 경우 : Kotlin 컴파일 작업에서 컴파일러 인수를 정의합니다. 프로덕션 코드와 테스트 모두에 적용됩니다.

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
    }
}

멀티 플랫폼 프로젝트에서 Gradle을 사용하는 경우 : 각 대상 컴파일에 대한 컴파일러 인수를 정의합니다. 프로덕션 코드와 테스트 모두에 적용됩니다.

kotlin {
    targets.all {
        compilations.all {
            kotlinOptions {
                freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
            }
        }
    }
}

2
gradle에서 어떻게 할 수 있는지에 대한 스 니펫을 추가해 주시겠습니까?
saiedmomen

KEEP'미래 발전'섹션에서는 이러한 제한을 유발 한 잠재적 인 주요 변경 사항 중 일부를 설명합니다
gMale

양자 택일로, 당신은에 의해 제공되는 결과 유형의 다른 구현 사용할 수 github.com/michaelbull/kotlin-result 또는 github.com/kittinunf/Result을
lecker909


8

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/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.