33

ここに変数があります。コンポーネント タイプが であるClass<?> cls別の変数を取得したいと思います。 Array Class Objectcls

たとえば、cls=String.classの場合、取得したいString[].class; cls=の場合int.class、 を取得したいのですがint[].class、どうすればよいですか?

ご覧のとおり 、次String.classから取得するのは非常に簡単です。String[].class

Class<?> arrayCls = String[].class;
if(arrayCls.isArray()){
    Class<?> cls = arrayCls.getComponentType();
}

しかし、私はその逆を行う簡単な方法を見つけることができません.

考えられる解決策の 1 つを次に示します。

Class<?> clazz = String.class;
Class<?> arrayClass = Array.newInstance(clazz,0).getClass();

これを行うバッターの方法はありますか?

4

3 に答える 3

18

HRgiger の回答が改善されました。

@SuppressWarnings("unchecked")
static <T> Class<? extends T[]> getArrayClass(Class<T> clazz) {
    return (Class<? extends T[]>) Array.newInstance(clazz, 0).getClass();
}

どちらも、呼び出されると配列オブジェクトをインスタンス化します。配列タイプを取得するには、次を使用します

Class<?> childType = ...;
Class<?> arrayType = getArrayClass(childType);
于 2014-12-12T10:53:14.980 に答える
10

たぶん試してみてくださいClass.forName(String)

編集:これはコードスニペットです。

Class<?> arrayClass = String[].class;
System.out.println(arrayClass);
Class<?> namedClass = Class.forName("[L" + String.class.getName() + ";");
System.out.println(namedClass);
System.out.println(arrayClass == namedClass);
于 2012-11-15T06:00:46.277 に答える
10

Another trick I found is using varargs on util method.

public static void main(String[] args) throws ClassNotFoundException {

    Class<?> demo = Main.<String>getArrayClass();
    System.out.println(demo);
}

static <T> Class getArrayClass(T... param){
    return param.getClass();
}
于 2012-11-15T06:35:30.090 に答える