2

私は次のようなクラスを持っています

class A {

    private String property1;

    private String property2;

    private String property3;

    // constructor , getters , setters 

}

ソース ファイルに表示される順序で、このクラスのプロパティ名のリスト/配列を取得することは可能ですか? お気に入り["property1", "property2", "property3"]

4

3 に答える 3

2

答えは、できないということです。必要な情報は、実行時に .class ファイルから入手できません。

私のコードの他の部分では、このクラスのデータを特定の順序で「印刷」する必要があります。実際の場合、このクラスには多くのプロパティがあり、(順序として) 変更できるため、この配列/リストを自分で記述して必要な順序を取得できますが、クラスから取得できる場合は私にとってより良い。

この問題を解決するためのより良い方法を次に示します。

  • 印刷する前に、名前、型名、または意味のあるものでプロパティを並べ替えます。
  • Bean プロパティの順序を定義する Bean クラス (または別のクラス) に配列を埋め込みます。
  • Bean プロパティの順序を指定する別のメタデータ ファイルを作成します。

ソース コードのビルド時に前処理を行って、プロパティの順序を抽出し、(たとえば) ファイルに書き込むことができます。しかし、率直に言って、これらの側面は切り離したほうがよいと思います。たとえば、システム インテグレーターやエンド ユーザーがソース コードを変更せずにプロパティの順序を微調整できるようにします。

于 2012-05-21T22:45:56.113 に答える
1

このクラスのプロパティ名のリスト/配列を取得できます

はい、使用していますClass.getDeclaredFields()

ソースファイルに表示される順序で

いいえ、ソース ファイルを解析しない限り、いかなる種類の保証もありません。

于 2012-05-21T22:10:42.507 に答える
1

これは正確には不可能です。Class#getDeclaredFields返されるフィールドの順序については保証しません。しかし、先ほど行ったテストでは、実際にフィールドは宣言順に返されました。

于 2012-05-21T22:11:11.790 に答える