¿Cómo comprobar la clase "instancia de" en kotlin?


95

En la clase Kotlin, tengo parámetro de método como objeto (véase el documento Kotlin aquí ) para el tipo de clase T . Como objeto, paso diferentes clases cuando llamo al método. En Java podemos comparar la clase usando el instanceofobjeto de qué clase es.

Entonces, quiero verificar y comparar en tiempo de ejecución qué clase es.

¿Cómo puedo consultar la instanceofclase en kotlin?

Respuestas:


213

Utilice is.

if (myInstance is String) { ... }

o al revés !is

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


15

Podemos verificar si un objeto se ajusta a un tipo dado en tiempo de ejecución usando el isoperador o su forma negada!is .

Ejemplo:

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

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

Otro ejemplo en el caso de un objeto personalizado:

Vamos, tengo un objtipo CustomObject.

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

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

4
Tenga en cuenta otra cosa interesante aquí: dentro del bloque de if, objse lanza automáticamente a String. Así que usted puede utilizar las propiedades tales como lengthdirectamente, sin la necesidad de convertir explícitamente objal Stringinterior del bloque.
Jesper

7

Puede utilizar 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 */ }
}

3

Intente usar la palabra clave llamada is Referencia de página oficial

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

Es genial dar una respuesta con un documento oficial. Pero es una mejor práctica agregar un código de muestra en la respuesta, es útil si el enlace está muerto. Gracias por la respuesta.
pRaNaY

No se prefieren las respuestas solo vinculadas.
Jayson Minard

0

Puedes comprobar así

 private var mActivity : Activity? = null

entonces

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

    if (context is MainActivity){
        mActivity = context
    }

}

0

Puede leer la documentación de Kotlin aquí https://kotlinlang.org/docs/reference/typecasts.html . Podemos verificar si un objeto se ajusta a un tipo dado en tiempo de ejecución usando el isoperador o su forma negada !is, por ejemplo usando 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
}

luego, en la función principal, trato de imprimir y mostrarlo en la terminal:

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

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

Esta es la salida

6
500

-1

Otra solución: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.