为什么ClassName.class.getFields()只返回公共字段?

时间:2015-06-05 10:55:35

标签: java

我有一个A级

public class A {
    String host = "localhost";
    public String port = "8078";
    protected String preFix = "www.";
    private String postFix = "/uploads";
}

我使用以下代码获取A类的字段详细信息

public static void main(String[] args) {
        Field[] fields = A.class.getFields();
        System.out.println("fields are:" + Arrays.toString(fields));
    }

输出

fields are:[public java.lang.String org.test.A.port]

我理解getFields()方法只返回那些使用公共访问说明符声明的字段。

但是为什么Java实现了getFields() 像这样?

Java Team对此类实现的主要意图是什么?

3 个答案:

答案 0 :(得分:1)

Class类中有两种方法涉及字段:

  • getFields()返回此内容的所有可公开访问的字段 class(interface)及其所有超类
  • getDeclaredFields()返回 在此类(接口)上声明的所有字段,包括带有的字段 公共,默认,受保护和私人可见性。

这两种方法用例之间的区别应该非常明确。

答案 1 :(得分:0)

getFields的目的是返回通过类可用的所有公共字段,包括继承的字段。

如果您要查找此课程中声明的字段列表,请使用getDeclaredFields

答案 2 :(得分:0)

由于getDeclaredFields返回字段而不管其修饰符,因此您的问题没有意义。关键是要有适用于所有常见用例的方法。例如,使用getFields,您可以迭代仅具有常量的static类(这是在引入enum之前)。所以回答你的问题,这部分是为了涵盖常见的用例,现在部分是遗留的。