如何检查kotlin中的“instanceof”类?

时间:2017-05-21 15:47:12

标签: kotlin kotlin-extension

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

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

如何在kotlin中检查instanceof类?

8 个答案:

答案 0 :(得分:113)

使用is

if (myInstance is String) { ... }

或反向!is

if (myInstance !is String) { ... }

答案 1 :(得分:11)

我们可以使用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")
}

答案 2 :(得分:8)

合并whenis

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

official documentation

复制

答案 3 :(得分:6)

您可以使用c.e.demo.SpringBatchBootdemoApplication : Starting SpringBatchBootdemoApplication on Sony-PC c.e.demo.SpringBatchBootdemoApplication : No active profile set, falling back to default profiles: default s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigAppli‌​cationContext@ceda24‌​: startup date o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup c.e.demo.SpringBatchBootdemoApplication : Started SpringBatchBootdemoApplication in 1.254 seconds (JVM running for 1.837) s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigAppli‌​cationContext@ceda24‌​: startup date o.s.j.e.a.AnnotationMBeanExporter

is

答案 4 :(得分:2)

尝试使用名为is的关键字 Official page reference

if (obj is String) {
    // obj is a String
}
if (obj !is String) {
    // // obj is not a String
}

答案 5 :(得分:0)

您可以像这样检查

 private var mActivity : Activity? = null

然后

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

    if (context is MainActivity){
        mActivity = context
    }

}

答案 6 :(得分:0)

其他解决方案: KOTLIN

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

if (fragment?.tag == "MyFragment")
{}

答案 7 :(得分:-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