温馨提示×

java getdeclaredfields与getfields区别

小樊
81
2024-11-26 14:43:23
栏目: 编程语言

getDeclaredFields()getFields() 是 Java 中 Class 类的两个方法,它们都用于获取类的字段信息,但它们之间存在一些重要区别:

  1. 获取范围:

    • getDeclaredFields():此方法仅返回当前类中声明的字段(包括私有、受保护、默认访问权限和公共字段),不包括继承自父类的字段。
    • getFields():此方法返回当前类及其所有父类中声明的字段,包括继承自父类的字段。
  2. 访问权限:

    • getDeclaredFields():由于它仅返回当前类中声明的字段,因此可以获取所有访问权限的字段,包括私有字段。
    • getFields():由于它返回当前类及其所有父类中声明的字段,因此可能无法获取某些私有字段,具体取决于父类中的访问权限。
  3. 返回类型:

    • 两者都返回 Field 对象的数组。
  4. 用途:

    • 当你只需要获取当前类中声明的字段信息时,可以使用 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

0