我没有做太多反思,所以这个问题可能很明显.例如,我有一个班级:
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表示某种类型T的T.class,因此,你需要以下检查:
if (array == byte[].class) { ... }
Run Code Online (Sandbox Code Playgroud)
如果数组是一个类只会instanceof Class是真的..
如果要检查可以使用的字段类型
if(field.getType() == byte[].class)
Run Code Online (Sandbox Code Playgroud)