10

オブジェクトの値をログ ファイルに出力する必要があります。私が使用した:

ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE, true, true);

ただし、含めたくない null 値も出力されます。たとえば、次のようになります。

Pojo@117d9a3[id=1, name=null ,description=マンチェスター・ユナイテッド,KEY=APP-KEY,secretKey=Alex ]

null値が含まれないようにする方法は?

4

6 に答える 6

18

サブクラス化を行わないより単純な解決策は、accept メソッドをオーバーライドすることです。

public String toStringWithAttributes() {

    Object myself = this;
    ReflectionToStringBuilder builder = new ReflectionToStringBuilder(
            this, ToStringStyle.SHORT_PREFIX_STYLE) {

            @Override
            protected boolean accept(Field field) {
                try {
                    return super.accept(field) && field.get(myself) != null;
                } catch (IllegalAccessException e) {
                    return super.accept(field);
                }
            }

    };

    return builder.toString();

}

これには、必要なものを何でも使用できToStringStyle、それ以外の場合はフォーマットが完璧であるという追加の利点があります.

于 2016-12-19T08:51:19.757 に答える
0

3.6以降、組み込みメソッドがあります

ReflectionToStringBuilder.toString(this, ToStringStyle.DEFAULT_STYLE,false,false,true,null);

メソッドのシグネチャは次のとおりです。

ReflectionToStringBuilder.toString(
   Object object, 
   ToStringStyle style, 
   boolean outputTransients, 
   boolean outputStatics, 
   boolean excludeNullValues, 
   Class<? super Object> reflectUpToClass)
于 2021-12-27T12:19:25.273 に答える
0

すぐに使用できる実装が Apache commons-lang3 から存在します。

ReflectionToStringBuilder.toString(新しい Pojo(), ToStringStyle.DEFAULT_STYLE, true, false, true , null)

出力は要求どおりです。

general.Pojo@3532ec19[description=Manchester,id=1]

使用:
public static String toString( final T オブジェクト、final ToStringStyle スタイル、final boolean outputTransients、final boolean outputStatics、final boolean excludeNullValues、final Class<? super T> ReflectUpToClass)

于 2021-06-29T09:38:25.587 に答える