在Kotlin中获取变量的类型

mat*_*teo 20 instanceof kotlin

如何在Kotlin中找到变量类型?在Java中有instanceof,但Kotlin不存在:

val properties = System.getProperties() // Which type?
Run Code Online (Sandbox Code Playgroud)

Wil*_*zel 35

您可以使用反射来做到这一点:

val number = 5
if(number is Int) {
   println("number is of type Int")
}
Run Code Online (Sandbox Code Playgroud)

请注意:

在Java平台上,使用反射功能所需的运行时组件作为单独的JAR文件(kotlin-reflect.jar)分发.这样做是为了减少不使用反射功能的应用程序所需的运行时库大小.如果使用反射,请确保将.jar文件添加到项目的类路径中.

资料来源:https://kotlinlang.org/docs/reference/reflection.html#bound-class-references-since-11

要测试特定类型,您可以使用is运算符.

println("${number::class.simpleName}")    // "Int"
println("${number::class.qualifiedName}") // "kotlin.Int"
Run Code Online (Sandbox Code Playgroud)

  • +1,但我先介绍一下“ is”运算符。在我看来,OP明确询问了一个等效的实例,因此对我来说,“反射”似乎比反射更为准确。 (2认同)

小智 33

你可以这样使用:

val value="value"
println(value::class.java.typeName)
Run Code Online (Sandbox Code Playgroud)

  • 这并没有给事情增添任何新的内容。您只需使用“java.lang.Class<T>”的“typeName”,而不是“KCLass<T>”的“qualifiedName”(更像 Kotlin 风格),正如我在回答 https://stackoverflow 中所示。 com/a/45165263/1788806 这是之前选择的。 (2认同)