6
public static void main(String[] args) throws Exception {
    int[] a = new int[] { 1, 2, 3 };
    method(a);
}

public static void method(Object o) {
    if (o != null && o.getClass().isArray()) {
        Object[] a = (Object[]) o;
        // java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
    }
}

のパラメーターの型が何であるかを知ることは想定されていませomethod。どうすればそれをObject[]配列にキャストできますか?

instanceofパラメータは任意のタイプの配列になる可能性があるため、解決策にはなりません。

PS: 配列のキャストを扱う SO に関するいくつかの質問を見てきましたが、配列の型がわからない人は (まだ?) いません。

4

4 に答える 4

7

java.lang.reflect.Array.get()未知の配列から特定の要素を取得するために使用できます。

于 2013-04-11T12:28:01.630 に答える
5

プリミティブの配列(intあなたの場合は s )を s の配列にキャストすることはできませんObject。変更する場合:

int[] a = new int[] { 1, 2, 3 };

Integer[] a = new Integer[] { 1, 2, 3 };

それはうまくいくはずです。

于 2013-04-11T12:25:11.590 に答える
4

Object[]実際にはこれはint-sの配列であるため、このオブジェクトをクラスにキャストすることはできません。したがって、次のように記述すれば正しいことになります。

public static void method(Object o) {
    if (o instanceof int[]) {
        int[] a = (int[]) o;
        // ....
    }
}
于 2013-04-11T12:23:39.097 に答える
3

オプション1

o.getClass ().getComponentType()を使用して、それがどのタイプであるかを判断します。

if (o != null) {
  Class ofArray = o.getClass().getComponentType(); // returns int  
}

デモを見る


オプション 2

if (o instanceof int[]) {
  int[] a = (int[]) o;           
}

*注意: int 以外の任意の型を使用して、それがどのような種類の配列であるかを判断し、必要に応じてそれにキャストすることができます。

于 2013-04-11T12:23:32.290 に答える