Як перевірити клас “instanceof” у kotlin?


95

У Kotlin класу, у мене є параметр методу в якості об'єкта (див Kotlin документа тут ) для типу класу T . Як об'єкт я передаю різні класи, коли викликаю метод. У Java ми можемо порівнювати клас, використовуючи instanceofоб'єкт, який це клас.

Тож я хочу перевірити та порівняти під час виконання, який це клас?

Як я можу перевірити instanceofклас у kotlin?

Відповіді:


213

Використовуйте is.

if (myInstance is String) { ... }

або навпаки !is

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


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всередині блоку.
Jesper

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

3

Спробуйте використати ключове слово під назвою is Офіційне посилання на сторінку

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

Чудово дати відповідь офіційним документом. Але краще додавати зразок коду у відповідь, корисно, якщо посилання було мертвим. Дякую за відповідь.
pRaNaY

Відповіді лише для зв’язку не є кращими.
Джейсон Мінард,

0

Ви можете перевірити так

 private var mActivity : Activity? = null

тоді

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

    if (context is MainActivity){
        mActivity = context
    }

}

0

Ви можете прочитати Документацію 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.