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 instanceof
des 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 instanceof
Unterricht in Kotlin überprüfen ?
kotlin
kotlin-extension
pRaNaY
quelle
quelle
Mit dem
is
Operator 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
obj
Typ habenCustomObject
.if (obj is CustomObject) { print("obj is of type CustomObject") } if (obj !is CustomObject) { print("obj is not of type CustomObject") }
quelle
if
,obj
wird automatisch gegossenString
. Sie können also Eigenschaften wielength
direkt verwenden, ohne explizitobj
inString
den Block umwandeln zu müssen.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 */ } }
quelle
Versuchen Sie es mit einem Schlüsselwort namens
is
Offizielle Seitenreferenzif (obj is String) { // obj is a String } if (obj !is String) { // // obj is not a String }
quelle
Sie können die Kotlin-Dokumentation hier lesen: https://kotlinlang.org/docs/reference/typecasts.html . Mit dem
is
Operator oder seiner negierten Form können wir überprüfen, ob ein Objekt zur Laufzeit einem bestimmten Typ entspricht.!is
Beispielis
: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
quelle
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 } }
quelle
Andere Lösung: KOTLIN
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment?.tag == "MyFragment") {}
quelle