检查java.lang.reflect.Field类型是否为字节数组

Pau*_*nis 9 java reflection

我没有做太多反思,所以这个问题可能很明显.例如,我有一个班级:

public class Document {

    private String someStr;    

    private byte[] contents;  

    //Getters and setters

}
Run Code Online (Sandbox Code Playgroud)

我试图检查该字段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);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出是:class [B.我看到找到了字节数组,但如果我这样做:

if (array instanceof byte[]) {...}
Run Code Online (Sandbox Code Playgroud)

这种情况永远不会true.这是为什么?以及如何检查对象是否包含类型为的字段byte[]

axt*_*avt 18

array instanceof byte[]检查是否array是类型的对象byte[].但在你的情况下array不是a byte[],它是一个Class代表的类型的对象byte[].

您可以访问Class表示某种类型TT.class,因此,你需要以下检查:

if (array == byte[].class) { ... }
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 7

如果数组是一个类只会instanceof Class是真的..

如果要检查可以使用的字段类型

if(field.getType() == byte[].class)
Run Code Online (Sandbox Code Playgroud)