如何检查“instanceof”;在kotlin上课?

在kotlin类中,我将方法参数作为类类型T的对象(参见kotlin doc 在这里)。作为对象,当我调用方法时,我传递不同的类。 在Java中,我们可以使用object的instanceof来比较它是哪个类。< / p >

所以我想在运行时检查和比较它是哪个类?

我如何在kotlin检查instanceof类?

150095 次浏览

使用is

if (myInstance is String) { ... }

或反向!is

if (myInstance !is String) { ... }
尝试使用名为is的关键字 官方页面参考 < / p >
if (obj is String) {
// obj is a String
}
if (obj !is String) {
// // obj is not a String
}

可以在运行时使用is操作符或其反形式!is来检查对象是否符合给定类型。

例子:

if (obj is String) {
print(obj.length)
}


if (obj !is String) {
print("Not a String")
}

自定义对象的另一个例子:

假设,我有一个类型为CustomObjectobj

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

结合whenis:

when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}

官方文档复制

你可以这样检查

 private var mActivity : Activity? = null

然后

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


if (context is MainActivity){
mActivity = context
}


}

其他解决方案:芬兰湾的科特林

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
}

然后在main函数中,我尝试打印并在终端上显示它:

fun main() {
val stringResult = getResult("Kotlin")
val intResult = getResult(100)


// TODO 2
println(stringResult)
println(intResult)
}

这是输出

6
500