如何在Kotlin中找到变量类型?在Java中有instanceof,但Kotlin并不存在:
instanceof
val properties = System.getProperties() // Which type?
nfs0ujit1#
您可以使用is运算子来检查对象是否属于特定类型:
is
val number = 5 if(number is Int) { println("number is of type Int") }
您也可以使用反映取得String的型别:
String
println(Int::class.simpleName) // "Int" println(Int::class.qualifiedName) // "kotlin.Int"
请注意:在Java平台上,使用反射功能所需的运行时组件作为单独的JAR文件(kotlin-reflect.jar)分发。这样做是为了减少不使用反射功能的应用程序所需的运行时库大小。如果确实使用反射,请确保将.jar文件添加到项目的类路径中。来源:https://kotlinlang.org/docs/reference/reflection.html#bound-class-references-since-11
58wvjzkj2#
您可以这样使用:
val value="value" println(value::class.java.typeName)
sbtkgmzw3#
可以使用properties::class.simpleName获取类名
properties::class.simpleName
7cwmlq894#
只是提到的答案之间的一个小细节。
var x = "X" println(x::class.simpleName) // prints String
当您将代码反编译为Java字节码时,此代码在底层使用了反射,如下所示:Reflection.getOrCreateKotlinClass(x.getClass()).getSimpleName()
Reflection.getOrCreateKotlinClass(x.getClass()).getSimpleName()
var y = "Y" println(y.javaClass.simpleName) // prints String
这将编译到y.getClass().getSimpleName(),速度快了大约50毫秒。
y.getClass().getSimpleName()
4条答案
按热度按时间nfs0ujit1#
您可以使用
is
运算子来检查对象是否属于特定类型:您也可以使用反映取得
String
的型别:请注意:
在Java平台上,使用反射功能所需的运行时组件作为单独的JAR文件(kotlin-reflect.jar)分发。这样做是为了减少不使用反射功能的应用程序所需的运行时库大小。如果确实使用反射,请确保将.jar文件添加到项目的类路径中。
来源:https://kotlinlang.org/docs/reference/reflection.html#bound-class-references-since-11
58wvjzkj2#
您可以这样使用:
sbtkgmzw3#
可以使用
properties::class.simpleName
获取类名7cwmlq894#
只是提到的答案之间的一个小细节。
当您将代码反编译为Java字节码时,此代码在底层使用了反射,如下所示:
Reflection.getOrCreateKotlinClass(x.getClass()).getSimpleName()
这将编译到
y.getClass().getSimpleName()
,速度快了大约50毫秒。