10

Person3つの変数を含むJavaBeanクラスがあります。

  • 名前(文字列)
  • 年齢(文字列)
  • アドレス(オブジェクト)。

Address3つの変数が含まれています:

  • door_no

のすべての変数を出力するユーティリティが欲しいのですがPerson

これは、印刷する必要があることと、それに含まれるオブジェクトPersonも意味します。Address

ハッシュマップを作成し、リフレクションを使用して変数の名前と値を配置し、JSPでキー/値のUIを出力できますが、問題はAddress、ハッシュマップに変数/値を追加するためにリフレクションを適用する必要があることです。

これを行うために利用できるユーティリティはありますか?

4

4 に答える 4

37

ApacheCommonsのToStringBuilderを使用できます。

ドキュメントから:

このメソッドの一般的な呼び出しは次のようになります。

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }

詳細:

このクラスを使用すると、任意のクラスまたはオブジェクトに対して、一貫性のある優れたtoString()を構築できます。このクラスは、次の方法でプロセスを簡素化することを目的としています。

すべてのタイプを一貫して処理するフィールド名がnullを一貫して処理できるようにし、配列と多次元配列を一貫して出力できるようにします。クラス階層を処理するオブジェクトとコレクションの詳細レベルを制御できるようにします。このクラスを使用するには、次のようにコードを記述します。

 public class Person {
   String name;
   int age;
   boolean smoker;

   ...

   public String toString() {
     return new ToStringBuilder(this).
       append("name", name).
       append("age", age).
       append("smoker", smoker).
       toString();
   }
 }

または、リフレクションを使用してテストするフィールドを決定する方法があります。これらのフィールドは通常プライベートであるため、メソッドreflectionToStringはAccessibleObject.setAccessibleを使用してフィールドの可視性を変更します。適切な権限が正しく設定されていない限り、これはセキュリティマネージャでは失敗します。また、明示的にテストするよりも時間がかかります。このメソッドの一般的な呼び出しは次のようになります。

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }
于 2012-07-26T12:27:16.397 に答える
4

あなたはおそらくApacheCommonsを探していますToStringBuilder#reflectionToString(Object)

于 2012-07-26T12:27:27.797 に答える
2

この目的には、 JacksonJSONシリアライザーが役立つ場合があります。ジャクソンライブラリはすでにスタックの一部になっている可能性があります。そうでない場合は、以下で必要な依存関係を見つけてください。

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper();
public static String toStringUsingJackson(final Object object) {
    try {
        return OBJECT_MAPPER_SINGLETON.writeValueAsString(object);
    } catch (final JsonProcessingException e) {
        return String.valueOf(object);
    }
}

サンプル出力:

{"name": "John Doe"、 "age":42}

必要なMaven/Gradleの依存関係

  • jackson-core、groupId = com.fasterxml.jackson.core
  • jackson-databind、groupId = com.fasterxml.jackson.core
于 2017-04-20T12:17:56.483 に答える
1

メソッドを実装して必要なものを印刷することも、 ApacheCommonshttp://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.htmlとそのメソッドtoStringを使用することもできます。。これがプロパティ(住所など)で繰り返されるとは思いませんが、住所がStreet、Door No、Cityで印刷されていることを確認するには、そのメソッドを実装してその情報を印刷します。ToStringBuilder reflectionToStringtoString

于 2012-07-26T12:28:04.587 に答える