2017-10-07 16 views
1

私はjava.lang.Integerクラスのフィールドを印刷しようとしています。プリミティブフィールドと配列、その要素、つまりインデックスのみ。[Cは[Ljava.lang.Object;にキャストできません。

アレイ印刷部でエラーが発生します。

これは、私がそのために持っているコードスニペットされています。それは私のタイトルに言及したエラーを与えるしかし

else if(field.getType().isArray()) 
{     
    String printValue = Arrays.toString((Object[]) field.get(obj));     
} 

+1

正確なエラーメッセージがどのようなものです:あなただけの配列の型をテストする場合/他のはしごを持っている、と明示的にキャストする場合は、これらを作成する必要はありませんか?問題を再現するための簡潔で完全な例を提供できますか? – Zabuza

答えて

2

このフィールドのタイプはchar[]です。プリミティブ配列はObject[]のインスタンスではないため、Object[]にキャストできません。

Arrayクラスのアクセサメソッドが役立つことがあります。例えば

Object val = field.get(obj); 
Object[] objs = 
    IntStream.range(0, Array.getLength(val)) 
     .mapToObj(i -> Array.get(val, i)) 
     .toArray(); 
String printValue = Arrays.toString(objs); 

ノートが、これは、少なくとも配列を作成し、すべての値をボックスありません。

if (val instanceof char[]) { 
    printValue = Arrays.toString((char[]) val); 
} else if (val instanceof int[]) { 
    printValue = Arrays.toString((int[]) val); 
} // Etc.