を返す私はこのようなクラスを宣言:アンドロイドgetDeclaredFieldsは()障害の結果
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,
しかし、アンドロイド(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,
順序はストラングありますe、クラスの順序やアルファベット順ではありません getDelclaredFields()
の実装がAndroidで変更されていることに気づきました(これはネイティブメソッドです)。動作を変更することは不可能かもしれません。しかし、私はまだ順序フィールドを得る方法を知りたい。
フィールドはクラスで宣言される順序は正しさとは無関係であるべきそのクラスまたは他のクラスのコードのあなたがコミュニティと共有したい/共有できる場合、あなたのユースケースIDについて本当に興味がありますか? –
このメソッドのJavadocは、戻り値が特定の方法でソートまたは順序付けされないことを指定します。これはAndroidとは関係ありません。異なるJVMを使用したり、現在のものを更新したりすると、PC上の順序が変わることがあります。 –
問題をアップデートして、完全なJavaソースと出力を追加しました。 –