我试图以声明的顺序获取所有私有字段的名称:
for ( PropertyDescriptor propertyDescriptor : org.springframework.beans.BeanUtils.getPropertyDescriptors( Some.class ) )
{
System.out.println(propertyDescriptor.getName());
}
当我尝试获取它们时,它们按字段名称按升序排列。
由于
答案 0 :(得分:3)
Class.getDeclaredFields()
按声明顺序返回字段。只获得私人的:
for (Field field : YourClass.cass.getDeclaredFields())
if (Modifier.isPrivate(field.getModifiers()))
System.out.println(field.getName());
请注意,不包含继承的字段,引用javadoc:
返回Field对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但排除继承字段。
为此,您必须对超类和实现的接口(递归地)执行相同的操作。
警告:强>
引自javadoc:
返回数组中的元素没有排序,也没有任何特定的顺序。
API不要求以任何方式对返回的Field
数组进行排序,但在实践中(Oracle实现),它们的顺序与您声明的顺序相同。
答案 1 :(得分:0)
我们无法确定Class.getDeclaredFields()
是否保持今天的行为方式。 Oracle可以在任何升级的JDK中随时更改它!
如果订单对您很重要,我会采用字段编辑方式来实现字段编号。
如果你想继续代码中的顺序并且不想继续当前Class.getDeclaredFields()
的实现,你必须自己解析java源文件。 Javaparser可能会为你节省很多时间。