2016-08-09 5 views
7

मैं अनन्य मानों को सेट करने के साथ प्रयोग कर रहा था और काम करने के लिए निम्नलिखित प्राप्त करने का प्रयास कर रहा था। यह ज्यादातर संशोधित जेनरिक की शक्ति (और सीमाओं) में जिज्ञासा है।कोटलिन संशोधित प्रकार पैरामीटर स्मार्ट कास्ट नहीं है

मैं डेटा कक्षाओं के वैकल्पिक मानकों के लिए डिफ़ॉल्ट मान प्रदान करने का प्रयास कर रहा था।

inline fun <reified T> uninitialized(): T = when (T::class) { 
    Long::class -> -1L // Type mismatch. Required: T Found: Long 
    String::class -> "" // Type mismatch. Required: T Found: String 
    // and so on... 
    else -> throw UnsupportedOperationException("No uninitialized value defined for " + T::class) 
} 

data class Thing(
    var id: Long = uninitialized(), 
    var name: String = uninitialized() // and so on... 
) 

जब whenis Type खंड भी शामिल है, Kotlin स्मार्ट कास्टिंग है। इस उदाहरण में, स्मार्ट कास्टिंग में लात नहीं है इसलिए यह संकलित नहीं होगा।

कुछ ऐसा करने के लिए कोई विचार समान है?

उत्तर

6

is का उपयोग करने के लिए is का उपयोग करने के बाद या null के साथ तुलना करने के बाद एक विशिष्ट ऑब्जेक्ट पर एक स्मार्ट कास्ट लागू किया जाता है। आपके उदाहरण में, कोई विशिष्ट वस्तु नहीं है जिसके लिए आप प्रकार की जांच करते हैं, और स्मार्ट कास्ट लागू करने के लिए कुछ भी नहीं है।

हालांकि, आप मैन्युअल रूप से T पर लागू कर सकते हैं, जो अपेक्षा के अनुसार काम करेगा। यहाँ अपने नमूना समारोह की एक काम संस्करण, Kotlin के प्रतिबिंब पुस्तकालय जो 1.1 में तय हो जाएगा की विशेषताओं को संभालने के लिए अद्यतन है:

inline fun <reified T : Any> uninitialized(): T = when (T::class.java) { 
    Long::class.javaPrimitiveType, Long::class.javaObjectType -> -1L as T  
    String::class.java -> "" as T 
    // and so on... 
    else -> throw UnsupportedOperationException("No uninitialized value defined for " + T::class) 
} 

data class Thing(
    var id: Long = uninitialized(), 
    var name: String = uninitialized() // and so on... 
) 

fun main(args: Array<String>) { 
    val t = Thing() 
    println(t.id) 
} 
+0

'T' पूरे' करने के लिए लागू किया जा सकता के रूप में when' 'के अंत में अनियमित ' – voddan

संबंधित मुद्दे