Given Kotlin 1.1。いくつかのクラスのinstance
について、instance::class.java
とinstance.javaClass
はほぼ同等であるように見える:インスタンス:: class.javaとインスタンス.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
を使用しないように優れていることを主張するだろう。それに対して何か議論はありますか?
私は 'javaClass'が廃止予定とみなされているところを読んだと思いますが、今すぐ見つけられません。 – marstran