2016-12-18 3 views
5

私はArray<*>のKClassを得るために以下のコードを書いた。配列のKClassを取得するには?

Array::class 

ただし、このコードにはコンパイルエラーがあります。

Kotlin:リテラルArrayクラスは型引数を必要とし、あなたはその理由や解決策を知っています角括弧内の1つの

を指定してください?

答えて

8

Kotlin Array<T> typesは、Java arraysにマッピングされています。これは、Javaジェネリックタイプと異なり、type erasureの対象ではなく、reifiedです。

異なる要素型を持つ配列は異なるクラスで表され、異なるトークンを持つことを意味し、これらのクラストークンには要素型に関する情報も含まれています。 配列タイプはありませんが、異なるエレメントタイプを持つ配列の配列タイプのみです。

ジェネリックArray<T>が存在しないので、あなたが唯一の指定された要素の型と配列型の実行時型情報を取得することができ、いずれかの反射を使用することはできません。

val c = Array<Int>::class // corresponds to Java Integer[] type 
val d = Array<Array<String>>::class // corresponds to Java String[][] 

val e = IntArray::class // corresponds to Java int[] 

あなたがするかどうかを確認する必要がある場合は任意のクラスは配列型ですが、Javaリフレクションで行うことができます:

val c = Array<Int>::class 

println(c.java.isArray) // true 
関連する問題