instance :: class.java vs. instance.javaClass
Dado Kotlin 1.1. Para uminstance
de alguma classe,instance::class.java
einstance.javaClass
parece ser quase equivalente:
val i = 0
println(i::class.java) // int
println(i.javaClass) // int
println(i::class.java === i.javaClass) // true
Há uma diferença sutil, no entanto:
val c1: Class<out Int> = i::class.java
val c2: Class<Int> = i.javaClass
instance.javaClass
é insignificante mais curto, masinstance::class.java
é mais consistente com o uso correspondente em um tipo. Enquanto você pode usar.javaClass
em alguns tipos, o resultado pode não ser o que você esperaria:
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
Então, eu argumentaria que é melhor nunca usar.javaClass
para mais consistência. Existem argumentos contra isso?