ページ

2011/05/03

Java リフレクションで取得するフィールドの順番

|
リフレクションでフィールドを取得すると、フィールドの順番が何に基づいているのか分からない結果となりました。

Java API仕様を見ると、確かに順序は決まっていないという記述がありました。
Class#getFields()

この Class オブジェクトが表すクラスまたはインタフェースのすべてのアクセス可能な public フィールドをリフレクトする、Field オブジェクトを保持している配列を返します。返された配列内の要素は、ソートされていたり、特定の順序になっていたりすることはありません。


Javaの標準的な機能ではフィールドの定義順でフィールド情報を取得することはできなさそうです。

以下のように、フィールド名やアノテーションを使えば順序を規定することはできそうです。
Java reflection: Is the order of class fields and methods standardized? - stackoverflow

これを使って、AndroidのParcelableの実装を汎用化しようと思います。
# Parcelable#writeToParcel(Parcel, int)やコンストラクタにフィールドを列挙するのを毎回書かずに済むようにします。

0 件のコメント: