Given Kotlin 1.1. For an instance
of some class, instance::class.java
and instance.javaClass
seem to be nearly equivalent:
val i = 0
println(i::class.java) // int
println(i.javaClass) // int
println(i::class.java === i.javaClass) // true
There is a subtle difference, however:
val c1: Class<out Int> = i::class.java
val c2: Class<Int> = i.javaClass
instance.javaClass
is negligibly shorter, but instance::class.java
is more consistent with the corresponding usage on a type. While you can use .javaClass
on some types, the result may not be what you would expect:
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
So, I would argue that it is better to never use .javaClass
for more consistency. Are there any arguments against that?
Aucun commentaire:
Enregistrer un commentaire