我有一个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对此类实现的主要意图是什么?
答案 0 :(得分:1)
Class
类中有两种方法涉及字段:
getFields()
返回此内容的所有可公开访问的字段
class(interface)及其所有超类,getDeclaredFields()
返回
在此类(接口)上声明的所有字段,包括带有的字段
公共,默认,受保护和私人可见性。这两种方法用例之间的区别应该非常明确。
答案 1 :(得分:0)
getFields
的目的是返回通过类可用的所有公共字段,包括继承的字段。
如果您要查找此课程中声明的字段列表,请使用getDeclaredFields
。
答案 2 :(得分:0)
由于getDeclaredFields
返回字段而不管其修饰符,因此您的问题没有意义。关键是要有适用于所有常见用例的方法。例如,使用getFields
,您可以迭代仅具有常量的static
类(这是在引入enum
之前)。所以回答你的问题,这部分是为了涵盖常见的用例,现在部分是遗留的。