【问题标题】:Get type of a variable in Kotlin在 Kotlin 中获取变量的类型
【发布时间】:2021-11-02 00:54:43
【问题描述】:

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

val properties = System.getProperties() // Which type?

【问题讨论】:

  • 你选择的新答案添加了什么新东西?

标签: kotlin instanceof


【解决方案1】:

您可以使用is operator 来检查对象是否属于特定类型:

val number = 5
if(number is Int) {
   println("number is of type Int")
}

你也可以使用反射获得String的类型:

println("${number::class.simpleName}")    // "Int"
println("${number::class.qualifiedName}") // "kotlin.Int"

请注意:

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

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

【讨论】:

    【解决方案2】:

    你可以这样使用:

    val value="value"
    println(value::class.java.typeName)
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 这并没有增加任何新内容。您只需使用 typeNamejava.lang.Class<T> 而不是 qualifiedNameKCLass<T> (更多 Kotlin-ish),正如我在我的答案 stackoverflow.com/a/45165263/1788806 中显示的那样,这是之前选择的。
    • @WilliMentzel 您的回答是完美且惯用的。我不知道为什么选择这个!
    • 此解决方案需要 Android O (API 26) 或更高版本。
    【解决方案3】:

    你可以通过properties::class.simpleName获取类名

    【讨论】:

    • 也可以使用properties.javaClass.simpleName
    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多