Java Kotlin获取类型为字符串

Java Kotlin获取类型为字符串,java,kotlin,Java,Kotlin,我找不到如何使用Kotlin语言将变量(或常量)的类型设置为String,比如typeof(variable)。如何做到这一点? 您可以使用最适合您需要的方法之一: val obj: Double = 5.0 System.out.println(obj.javaClass.name) // double System.out.println(obj.javaClass.kotlin) // class kotlin.Double S

我找不到如何使用Kotlin语言将变量(或常量)的类型设置为
String
,比如
typeof(variable)
。如何做到这一点?


您可以使用最适合您需要的方法之一:

val obj: Double = 5.0

System.out.println(obj.javaClass.name)                 // double
System.out.println(obj.javaClass.kotlin)               // class kotlin.Double
System.out.println(obj.javaClass.kotlin.qualifiedName) // kotlin.Double

您可以对此进行处理。

有一种更简单的方法,使用
simpleName
属性并避免使用Kotlin前缀

lis
来自类型
ArrayList
。所以你可以用

println(lis.javaClass.kotlin.simpleName)  // ArrayList
或者,更优雅地说:

println(lis::class.simpleName)  // ArrayList 

您可以使用提供实例类型的“::class”关键字。使用“.toSting()”方法将此类型转换为字符串,您将得到一个“classxxxxxx”字符串,可以使用替换(…)将其缩减为“XXXXX”


和“迈克尔”一样answer@michael用Java而不是Kotlin回答。Rodrigo的回答是针对Kotlin的,不同之处在于,
instanceof
在Kotlin中不存在,但相反,我认为,
javaClass
是答案,正如其他注释中所述。这似乎不适用于可为空的类型。例如,如果您有
val obj=getInt()
where
getInt()
返回一个
Int?
类型,然后尝试
obj.javaClass.name
将导致编译错误如果属性可为空,然后,您当然必须运行
obj?.javaClass?.name
,如果您遇到
kotlin.jvm.KotlinReflectionNotSupportedError
:值得指出的是,这些名称可能会被混淆(ProGuard和R8)所破坏。您应该澄清您想对“变量类型”做什么,例如,如果检查“a是b的实例”,则不需要字符串。如果用于显示或其他用途,则可能是一个字符串。非常简单:variable::classWrite几句关于您的答案的话。解释你的答案会使你更容易理解它。
println(lis.javaClass.kotlin.simpleName)  // ArrayList
println(lis::class.simpleName)  // ArrayList 
var variable = MyClass()

var nameOfClass = variable::class.simpleName

nameofClass >> "MyClass"