कोटलिन में "Instof" वर्ग की जांच कैसे करें?


103

कोटलिन वर्ग में, मेरे पास क्लास टाइप T के लिए ऑब्जेक्ट के रूप में विधि पैरामीटर है ( यहाँ kotlin doc देखें ) । ऑब्जेक्ट के रूप में मैं अलग-अलग कक्षाएं पास कर रहा हूं जब मैं कॉलिंग विधि कर रहा हूं। जावा में हम ऑब्जेक्ट का उपयोग करके क्लास की तुलना करने में सक्षम हो सकते हैं कि यह किस क्लास का है।instanceof

इसलिए मैं रनटाइम की जांच करना और तुलना करना चाहता हूं कि यह किस वर्ग का है?

मैं instanceofकोटलिन में कक्षा की जांच कैसे कर सकता हूं ?

जवाबों:




15

हम जाँच कर सकते हैं कि क्या isऑपरेटर या उसके उपेक्षित रूप का उपयोग करके रनटाइम के दौरान कोई वस्तु दी गई है !is

उदाहरण:

if (obj is String) {
    print(obj.length)
}

if (obj !is String) {
    print("Not a String")
}

कस्टम ऑब्जेक्ट के मामले में एक और उदाहरण:

चलो, मेरे पास एक objप्रकार है CustomObject

if (obj is CustomObject) {
    print("obj is of type CustomObject")
}

if (obj !is CustomObject) {
    print("obj is not of type CustomObject")
}

4
यहां एक और अच्छी बात नोट करें: ब्लॉक के अंदर if, objस्वचालित रूप से डाली जाती है String। तो अगर आप इस तरह के रूप गुण का उपयोग कर सकते lengthआवश्यकता के बिना, सीधे स्पष्ट रूप से कास्ट करने के लिए objकरने के लिए Stringब्लॉक के अंदर।
जेस्पर

7

आप उपयोग कर सकते हैं is:

class B
val a: A = A()
if (a is A) { /* do something */ }
when (a) {
  someValue -> { /* do something */ }
  is B -> { /* do something */ }
  else -> { /* do something */ }
}

4

आधिकारिक पृष्ठ संदर्भ नामक कीवर्ड का उपयोग करने का प्रयास करेंis

if (obj is String) {
    // obj is a String
}
if (obj !is String) {
    // // obj is not a String
}

आधिकारिक डॉक्टर के साथ जवाब देना बहुत अच्छी बात है। लेकिन उत्तर में नमूना कोड जोड़ने के लिए यह बेहतर अभ्यास है, यदि लिंक मृत था, तो यह उपयोगी है। जवाब के लिए धन्यवाद।
pRaNaY

लिंक किए गए केवल उत्तर पसंद नहीं हैं।
जैसन मिनार्ड

1

आप यहां कोटलिन डॉक्यूमेंटेशन https://kotlinlang.org/docs/reference/typecasts.html पढ़ सकते हैं । हम जाँच कर सकते हैं कि isऑपरेटर द्वारा उपयोग किए गए रनटाइम पर कोई वस्तु दी गई प्रकार के अनुरूप है या उसके नकारात्मक रूप !isका उपयोग करके, उदाहरण के लिए is:

fun <T> getResult(args: T): Int {
    if (args is String){ //check if argumen is String
        return args.toString().length
    }else if (args is Int){ //check if argumen is int
        return args.hashCode().times(5)
    }
    return 0
}

तब मुख्य समारोह में मैं इसे प्रिंट करने और टर्मिनल पर दिखाने की कोशिश करता हूं:

fun main() {
    val stringResult = getResult("Kotlin")
    val intResult = getResult(100)

    // TODO 2
    println(stringResult)
    println(intResult)
}

यह आउटपुट है

6
500

0

आप इस तरह की जाँच कर सकते हैं

 private var mActivity : Activity? = null

फिर

 override fun onAttach(context: Context?) {
    super.onAttach(context)

    if (context is MainActivity){
        mActivity = context
    }

}

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