1

オブジェクトにカプセル化された配列があるとしましょう:

String[] strvls = { "Alessio", "Ale" };
Object container = strvls;

コンテナオブジェクトから配列を抽出して戻したいのですが、どうすればよいですか?

私はそれがこのように配列チェックであることを知っています:

if(container.getClass().isArray()) {
    //Extract the encapsulated array - How ?
}

配列の型が確実にわからないため、文字列配列にキャストできませんString[]...したがって、ジェネリック型の配列にキャストする必要があります。Javaで可能ですか?

4

3 に答える 3

6

Object[]配列にキャストできます:

String[] strvls = { "Alessio", "Ale" };
Object container = strvls;
if (container.getClass().isArray()) {
    Object[] data = (Object[]) container;
    System.out.println(data.length);
}
于 2012-10-06T09:54:05.857 に答える
2

Karasziの答えに似ていますが、ショートカットは多分:

if(container instanceof Object[])
  System.out.println("Array size: " + ((Object[])container).length);

重要な注意:これはプリミティブ配列では機能しません。StringはObjectクラスから派生しているため、上記のコードは機能します。

于 2012-10-06T09:59:42.020 に答える
0

あなたはそのような方法を持つことができます:

private static <T> T[] getArray(Object o){
    return (T[]) o;
}

これはジェネリック型での作業に役立ち、このメソッドにカプセル化された「チェックされていない」コンパイラ警告を保持できます。次に、次のことを実行できます。

Object[] array = getArray(container);

タイプについて何も知らない場合または:

String[] array = getArray(container);

あなたがそれが文字列配列であることを知っているなら。

于 2012-10-06T10:02:06.880 に答える