Wie überprüfe ich die Instanz der Klasse in Kotlin?


98

In Kotlin Klasse habe ich Methodenparameter als Objekt (siehe Kotlin doc hier ) für die Klasse Typ T . Als Objekt übergebe ich verschiedene Klassen, wenn ich method aufrufe. In Java können wir die Klasse anhand instanceofdes Objekts vergleichen, um welche Klasse es sich handelt.

Ich möchte also zur Laufzeit überprüfen und vergleichen, um welche Klasse es sich handelt.

Wie kann ich den instanceofUnterricht in Kotlin überprüfen ?

Antworten:


219

Verwenden Sie is.

if (myInstance is String) { ... }

oder umgekehrt !is

if (myInstance !is String) { ... }


15

Mit dem isOperator oder seiner negierten Form können wir überprüfen, ob ein Objekt zur Laufzeit einem bestimmten Typ entspricht !is.

Beispiel:

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

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

Ein weiteres Beispiel für ein benutzerdefiniertes Objekt:

Lassen Sie mich einen objTyp haben CustomObject.

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

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

4
Beachten Sie eine andere nette Sache hier: im Inneren des Blocks von der if, objwird automatisch gegossen String. Sie können also Eigenschaften wie lengthdirekt verwenden, ohne explizit objin Stringden Block umwandeln zu müssen.
Jesper

7

Sie können verwenden 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

Versuchen Sie es mit einem Schlüsselwort namens is Offizielle Seitenreferenz

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

Es ist großartig, eine Antwort mit dem offiziellen Dokument zu geben. Es ist jedoch besser, als Antwort Beispielcode hinzuzufügen. Es ist hilfreich, wenn der Link tot war. Danke für die Antwort.
pRaNaY

Nur verknüpfte Antworten werden nicht bevorzugt.
Jayson Minard

1

Sie können die Kotlin-Dokumentation hier lesen: https://kotlinlang.org/docs/reference/typecasts.html . Mit dem isOperator oder seiner negierten Form können wir überprüfen, ob ein Objekt zur Laufzeit einem bestimmten Typ entspricht. !isBeispiel 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
}

dann versuche ich in der Hauptfunktion, es zu drucken und auf dem Terminal anzuzeigen:

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

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

Dies ist die Ausgabe

6
500

0

Sie können dies überprüfen

 private var mActivity : Activity? = null

dann

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

    if (context is MainActivity){
        mActivity = context
    }

}

-1

Andere Lösung: KOTLIN

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)

if (fragment?.tag == "MyFragment")
{}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.