如何在Kotlin中检查“ instanceof”类?


103

在kotlin类中,我将方法参数作为类类型T的对象(请参见此处的kotlin doc )。作为对象,我在调用方法时传递不同的类。在Java中,我们可以使用对象来比较类。instanceof

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

如何instanceof在Kotlin中上课?

Answers:


229

使用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")
}

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

让我有一个objtype CustomObject

if (obj is CustomObject) {
    print("obj is of type CustomObject")
}

if (obj !is CustomObject) {
    print("obj is not of type CustomObject")
}

4
注意另外一个好处此处的区块内ifobj将自动转换为String。因此,您可以length直接使用诸如之类的属性,而无需显式obj转换String为块内部。
杰斯珀(Jesper)

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


1

您可以在这里https://kotlinlang.org/docs/reference/typecasts.html阅读Kotlin文档。我们可以使用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

0

你可以这样检查

 private var mActivity : Activity? = null

然后

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

    if (context is MainActivity){
        mActivity = context
    }

}

-2

其他解决方案:KOTLIN

val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)

if (fragment?.tag == "MyFragment")
{}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.