проекция.
вая Котлин 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
для большей согласованности. Есть ли аргументы против этого?