在kotlin类中,我将方法参数作为对象(参见kotlin doc here),类类型 T 。作为对象,当我调用方法时,我传递不同的类。
在Java中,我们可以使用对象的instanceof
来比较类。
所以我想在运行时检查并比较它是哪一类?
如何在kotlin中检查instanceof类?
答案 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)
合并when
和is
:
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
复制
答案 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.AnnotationConfigApplicationContext@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.AnnotationConfigApplicationContext@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