まくまくKotlinノート
あるインスタンスがどのクラスのオブジェクトなのか調べる (javaClass)
2019-04-26

Kotlin のあるインスタンスが、どのクラスのインスタンスかを調べるには、javaClass プロパティを使用します(Java の Object#getClass() に相当します)。

下記の例では、コレクション系のオブジェクトが、どのクラスのインスタンスなのかを調べています。

val array = arrayOf(1, 2, 3)
val list = listOf(1, 2, 3)
val arrayList = arrayListOf(1, 2, 3)
val set = setOf("A", "B", "C")
val hashSet = hashSetOf("A", "B", "C")
val map = mapOf("A" to 1, "B" to 2)
val hashMap = hashMapOf("A" to 1, "B" to 2)

println(array.javaClass)      //=> class [Ljava.lang.Integer;
println(list.javaClass)       //=> class java.util.Arrays$ArrayList
println(arrayList.javaClass)  //=> class java.util.ArrayList
println(set.javaClass)        //=> class java.util.LinkedHashSet
println(hashSet.javaClass)    //=> class java.util.HashSet
println(map.javaClass)        //=> class java.util.LinkedHasMap
println(hashMap.javaClass)    //=> class java.util.HashMap

この結果から、Kotlin のコレクション系クラスには Java の実装が用いられていることがわかります。

ちなみに、javaClass によって得られるインスタンスは、すべて java.lang.Class のインスタンスです。

println(list.javaClass.javaClass)  //=> class java.lang.Class

インスタンスではなく、クラスの型から java.lang.Class オブジェクトを取得するには、Class名::class.java のようにします。

println(ArrayList::class.java)  //=> class java.lang.ArrayList
2019-04-26