Kotlin: проверьте тип класса в функции - PullRequest
0 голосов
/ 15 марта 2019

Мне нужен список Activities, и я хочу пройтись по нему, чтобы проверить, что текущий Activity is этого типа затем что-то делает.

Текущий код:

if (activity is ActivityA || activity is ActivityB || activity is ActivityC) dosmth()

Как создать ArrayList этих действий и пройти по ним в методе? У меня есть трудности с определением Type, который следует использовать.

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Просто чтобы повторить меньше кода, я использовал:

if (activity::class in setOf(ActivityA::class, ActivityB::class, ActivityC::class)) {
    dosmth()
}
1 голос
/ 15 марта 2019

Я бы рассмотрел написание вашего кода как

when(activity) {
    is ActivityA, is ActivityB, is ActivityC -> dosmth()
}

Если вы действительно хотите коллекцию (например, потому что список классов может зависеть от чего-то), вы можете написать

val activityClasses = listOf(ActivityA::class, ActivityB::class, ActivityC::class).map { it.java }

if (activityClasses.any { it.isInstance(activity) }) {
    doSmth()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...