वापसी प्रकार के रूप में 'kotlin.Result' का उपयोग क्यों नहीं किया जा सकता है?


85

मैंने एक विधि बनाई है, और वापसी Result<R>एक वर्ग में है MyClass<R>, लेकिन त्रुटि संदेश है: 'kotlin.Result' का उपयोग रिटर्न प्रकार के रूप में नहीं किया जा सकता है

मैंने कुछ संकेत के लिए परिणाम स्रोत कोड भी देखा है; ऐसा क्यों है?

टेस्ट कोड (वी। 1.3-आरसी का उपयोग करके)।

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से आता है? मुझे वह कक्षा मानक पुस्तकालय में नहीं मिली ।
जेसपर

कोटलिन 1.3 या नए की कोशिश करें
ersin-ertan

जवाबों:


61

कोटलिन KEEP से :

इन सीमाओं के पीछे तर्क यह है कि कोटलिन के भविष्य के संस्करणों का विस्तार हो सकता है और / या उन कार्यों के शब्दार्थों को बदल सकता है जो परिणाम प्रकार के मूल्यों पर उपयोग किए जाने पर परिणाम प्रकार और अशक्त-सुरक्षा संचालक उनके शब्दार्थ को बदल सकते हैं। कोटिन के भविष्य के रिलीज में मौजूदा कोड को तोड़ने से बचने और उन परिवर्तनों के लिए दरवाजा खुला छोड़ने के लिए, संबंधित उपयोग अब एक त्रुटि पैदा करते हैं। इस नियम के अपवाद मानक पुस्तकालय में सावधानीपूर्वक समीक्षा की गई घोषणाओं के लिए किए गए हैं जो परिणाम प्रकार एपीआई का ही हिस्सा हैं।

नोट: यदि आप सिर्फ उस Resultप्रकार के साथ प्रयोग करना चाहते हैं जिसे आप कोटलिन कंपाइलर तर्क की आपूर्ति करके इस सीमा को बायपास कर सकते हैं -Xallow-result-return-type

जावा या एंड्रॉइड प्रोजेक्ट पर ग्रैडल का उपयोग करते समय: कोटलिन संकलन कार्य पर संकलक तर्क को परिभाषित करें। यह उत्पादन कोड और परीक्षणों दोनों के लिए लागू होता है।

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

मल्टीप्लायर प्रोजेक्ट पर ग्रैडल का उपयोग करते समय: प्रत्येक लक्ष्य संकलन के लिए संकलक तर्क को परिभाषित करें। यह उत्पादन कोड और परीक्षणों दोनों के लिए लागू होता है।

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

2
क्या आप कृपया एक स्निपेट जोड़ सकते हैं कि यह कैसे ग्रेडल में किया जा सकता है?
19

उस
KEEP

वैकल्पिक रूप से, आप github.com/michaelbull/kotlin-result या github.com/kittinunf/Result
lecker909

34
android {
    kotlinOptions {
        freeCompilerArgs = ["-Xallow-result-return-type"]
    }
}

यदि आप एंड्रॉइड के लिए इस घोल का उपयोग कर रहे हैं


कोटलिन डीएसएल:freeCompilerArgs = listOf("-Xallow-result-return-type")
मीका

8

मावेन का उपयोग करते हुए:

<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>

अगर ग्रेडेल का उपयोग कर रहे हैं:

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/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.