Ответ 1
Используйте is
.
if (myInstance is String) { ... }
или наоборот !is
if (myInstance !is String) { ... }
В классе kotlin у меня есть параметр метода как объект (см. kotlin doc здесь) для типа класса T. В качестве объекта я передаю разные классы, когда я вызываю метод.
В Java мы можем сравнивать класс, используя instanceof
объекта, класс которого он есть.
Итак, я хочу проверить и сравнить во время выполнения, какой класс это?
Как проверить экземпляр класса в kotlin?
Используйте is
.
if (myInstance is String) { ... }
или наоборот !is
if (myInstance !is String) { ... }
Сочетание when
и is
:
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
скопировано из официальной документации
Мы можем проверить, соответствует ли объект заданному типу во время выполнения с помощью оператора 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")
}
Вы можете использовать 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
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
if (fragment?.tag == "MyFragment")
{}
Вы можете прочитать документацию 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