Как проверить класс "instanceof" в kotlin?

В классе kotlin у меня есть параметр метода как объект (см. kotlin doc здесь) для типа класса T. В качестве объекта я передаю разные классы, когда я вызываю метод. В Java мы можем сравнивать класс, используя instanceof объекта, класс которого он есть.

Итак, я хочу проверить и сравнить во время выполнения, какой класс это?

Как проверить экземпляр класса в kotlin?

Ответы

Ответ 1

Используйте is.

if (myInstance is String) { ... }

или наоборот !is

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

Ответ 3

Мы можем проверить, соответствует ли объект заданному типу во время выполнения с помощью оператора 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

Вы можете использовать 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 */ }
}

Ответ 6

Вы можете проверить, как это

 private var mActivity : Activity? = null

затем

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

    if (context is MainActivity){
        mActivity = context
    }

}

Ответ 7

Другое решение: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}

Ответ 8

Вы можете прочитать документацию Kotlin здесь 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