В Kotlin класса, у меня есть параметр метода в качестве объекта (см Kotlin документа здесь ) для типа класса T . В качестве объекта я передаю разные классы, когда вызываю метод. В Java мы можем сравнивать класс с использованием instanceof
объекта, к какому классу он относится.
Итак, я хочу проверить и сравнить во время выполнения, какой это класс?
Как я могу проверить instanceof
класс в котлине?
kotlin
kotlin-extension
ПРАЙН
источник
источник
Мы можем проверить, соответствует ли объект заданному типу во время выполнения, используя
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") }
источник
if
,obj
автоматически приводится кString
. Таким образом, вы можете использовать такие свойства, какlength
напрямую, без необходимости явно приводитьobj
ихString
внутрь блока.Вы можете использовать
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 */ } }
источник
Попробуйте использовать ключевое слово под названием
is
Официальная ссылка на страницуif (obj is String) { // obj is a String } if (obj !is String) { // // obj is not a String }
источник
Вы можете проверить вот так
private var mActivity : Activity? = null
тогда
override fun onAttach(context: Context?) { super.onAttach(context) if (context is MainActivity){ mActivity = context } }
источник
Вы можете прочитать документацию 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
источник
Другое решение: КОТЛИН
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment?.tag == "MyFragment") {}
источник