我宣布了这样一个类:
public class Student implements Serializable {
private static final long serialVersionUID = 8010508999597447226L;
public long id;
public String name;
public int age;
public String phone;
public String address;
public static void main(String[] args) {
Field[] fields = Student.class.getFields();
System.out.println("getFields(): " + fields2String(fields));
fields = Student.class.getDeclaredFields();
System.out.println("getDeclaredFields(): " + fields2String(fields));
}
private static String fields2String(Field[] fields) {
if (fields != null) {
StringBuilder sb = new StringBuilder();
for (Field f : fields) {
sb.append(f.getName());
sb.append(",");
}
return sb.toString();
}
return null;
}
}
主要运行结果是:(顺序与我的Student.java相同,我的预期订单)
getFields(): id,name,age,phone,address,
getDeclaredFields(): serialVersionUID,id,name,age,phone,address,
但是在Android(4.1.2 Dalvik JVM)上运行相同的代码,结果字段顺序为:
07-28 09:54:14.271 5972-5972/com.ex I/System.out: getFields(): address,age,id,name,phone,
07-28 09:54:14.271 5972-5972/com.ex I/System.out: getDeclaredFields(): serialVersionUID,address,phone,name,age,id,
订单很奇怪,不是班级订单或字母顺序
我注意到Android中getDelclaredFields()
的实现已更改(它的本机方法public native Field[] getDeclaredFields();
)。可能无法改变行为。但我仍然想知道如何获得有序字段的结果。
答案 0 :(得分:1)
如果您按特定顺序需要它们,则可以使用Arrays.sort()。在下面的示例中,您将按名称对它们进行排序(请注意,我使用lambda作为比较器):
Arrays.sort(getClass().getDeclaredFields(), (a, b) -> a.getName().compareTo(b.getName()));