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