Java Kotlin获取类型为字符串
我找不到如何使用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
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()
wheregetInt()
返回一个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"