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


95

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

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

Как я могу проверить instanceofкласс в котлине?

Ответы:


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внутрь блока.
Джеспер

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.