【发布时间】:2017-10-10 19:48:08
【问题描述】:
鉴于 Kotlin 1.1。对于某个类的instance,instance::class.java 和instance.javaClass 似乎几乎是等价的:
val i = 0
println(i::class.java) // int
println(i.javaClass) // int
println(i::class.java === i.javaClass) // true
但是有一个细微的差别:
val c1: Class<out Int> = i::class.java
val c2: Class<Int> = i.javaClass
instance.javaClass 短到可以忽略不计,但instance::class.java 更符合类型的相应用法。虽然您可以在某些类型上使用.javaClass,但结果可能不是您所期望的:
println(i::class.java === Int::class.java) // true
println(i.javaClass === Int.javaClass) // false
println(Int::class.java === Int.javaClass) // false
println(Int.javaClass) // class kotlin.jvm.internal.IntCompanionObject
所以,我认为最好不要使用.javaClass 以获得更高的一致性。有什么反对意见吗?
【问题讨论】:
-
我想我在某处读到过
javaClass将被视为已弃用,但我现在找不到。 -
@marstran 只有重载
KClass<T>.javaClass已被弃用。 API reference
标签: reflection kotlin