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?

questionAnswers(1)

yourAnswerToTheQuestion