2012-10-22 9 views
7

私は多くのことを反映しないので、この質問は明らかです。例えば、私はクラスを持っている:java.lang.reflect.Fieldタイプがバイト配列であるかどうかを確認してください

public class Document { 

    private String someStr;  

    private byte[] contents; 

    //Getters and setters 

} 

私はフィールドcontentsは、バイト配列のインスタンスであるかどうかを確認しようとしています。私が試した:

Class clazz = Document.class; 
Field[] fields = clazz.getDeclaredFields(); 
for (Field field : fields) { 
    if (field.getType().isArray()) { 
     Object array = field.getType(); 
     System.out.println(array); 
    } 
} 

このコードの出力は次のとおりです。class [B。私はバイト配列が発見された参照が、私は行った場合:

if (array instanceof byte[]) {...} 

この条件はtrueことはありません。何故ですか?オブジェクトにbyte[]のタイプのフィールドが含まれているかどうかをチェックする方法は?

答えて

15

array instanceof byte[]チェックを識別することができる参照してください。しかし、あなたのケースでは、arraybyte[]ではありません。それはbyte[]を表すタイプClassのオブジェクトです。

このため、次のチェック必要、T.classとしていくつかのタイプTを表しClassにアクセスすることができます。配列のみinstanceof Classがtrueになりますクラスである場合

if (array == byte[].class) { ... } 
+0

ありがとう、今私はそれを得る:) –

0

あなたがしようとした場合:

Class<?> array = field.getType(); 
System.out.println(array.getCanonicalName()); 

それはbyte[]を印刷します。しかし、@ axtavtの答えが良いです。

1

this useful tutorial from Oracle

配列型()はClass.isArrayを呼び出すことによってarrayタイプbyte[]のオブジェクトであるかどうかを

7

を...

をあなたの場合あなたが使用できるフィールドのタイプを確認したい

if(field.getType() == byte[].class) 
3

試してみてください:

関連する問題