要素型から配列型を取得
要素型から配列型を取得したい。
Array.newInstanceで配列を生成してgetClassで取得できる。
package test; import java.lang.reflect.Array; public class GetArrayTypeTest { @SuppressWarnings("unchecked") public static <T> Class<T[]> getArrayType(final Class<T> clazz) { return (Class<T[]>) Array.newInstance(clazz, 0).getClass(); } public static void main(final String[] args) { System.out.println(getArrayType(int.class)); System.out.println(getArrayType(int[].class)); System.out.println(getArrayType(Cloneable.class)); System.out.println(getArrayType(Cloneable[].class)); // 無名クラス System.out.println(getArrayType(new Object(){/**/}.getClass())); // void System.out.println(getArrayType(void.class)); } }
実行結果
class [I class [[I class [Ljava.lang.Cloneable; class [[Ljava.lang.Cloneable; class [Ltest.GetArrayTypeTest$1; Exception in thread "main" java.lang.IllegalArgumentException at java.lang.reflect.Array.newArray(Native Method) at java.lang.reflect.Array.newInstance(Unknown Source) at test.GetArrayTypeTest.getArrayType(GetArrayTypeTest.java:9) at test.GetArrayTypeTest.main(GetArrayTypeTest.java:19)
無名クラスの配列型も問題なく取得できる。
void配列はありませんで書いた通り、void配列はない。
疑問
配列をnewしないで取得する方法はあるのだろうか?