instancia :: class.java vs. instancia.javaClass
Dado Kotlin 1.1. Por uninstance
de alguna clase,instance::class.java
yinstance.javaClass
parece ser casi equivalente:
val i = 0
println(i::class.java) // int
println(i.javaClass) // int
println(i::class.java === i.javaClass) // true
Sin embargo, hay una sutil diferencia:
val c1: Class<out Int> = i::class.java
val c2: Class<Int> = i.javaClass
instance.javaClass
es insignificantemente más corto, peroinstance::class.java
es más coherente con el uso correspondiente en un tipo. Si bien puedes usar.javaClass
en algunos tipos, el resultado puede no ser el que esperaría:
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
Entonces, yo diría que es mejor nunca usar.javaClass
para mayor consistencia ¿Hay algún argumento en contra de eso?