getDeclaredFields()
和 getFields()
是 Java 中 Class
类的两个方法,它们都用于获取类的字段信息,但它们之间存在一些重要区别:
获取范围:
getDeclaredFields()
:此方法仅返回当前类中声明的字段(包括私有、受保护、默认访问权限和公共字段),不包括继承自父类的字段。getFields()
:此方法返回当前类及其所有父类中声明的字段,包括继承自父类的字段。访问权限:
getDeclaredFields()
:由于它仅返回当前类中声明的字段,因此可以获取所有访问权限的字段,包括私有字段。getFields()
:由于它返回当前类及其所有父类中声明的字段,因此可能无法获取某些私有字段,具体取决于父类中的访问权限。返回类型:
Field
对象的数组。用途:
getDeclaredFields()
。getFields()
。示例:
public class MyClass {
private String privateField;
protected String protectedField;
public String publicField;
}
public class Main {
public static void main(String[] args) throws NoSuchFieldException {
Class<?> clazz = MyClass.class;
// 使用 getDeclaredFields() 获取当前类中声明的字段
Field[] declaredFields = clazz.getDeclaredFields();
System.out.println("Declared fields:");
for (Field field : declaredFields) {
System.out.println(field.getName());
}
// 使用 getFields() 获取当前类及其所有父类中声明的字段
Field[] fields = clazz.getFields();
System.out.println("\nFields:");
for (Field field : fields) {
System.out.println(field.getName());
}
}
}
输出:
Declared fields:
privateField
protectedField
publicField
Fields:
privateField
protectedField
publicField