JAVA 带你查看不一样的toSting

带你查看不一样的toSting

java之toString优雅封装,方便输出日志:

学习目标

  • 在项目里减少样板代码
  • 日志能输出有意义的信息

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class LgToString {
    @Override
    public String toString(){
        Class<?> aClass = this.getClass();
        List<String>stringList = new ArrayList<>(20);
        while(aClass!=LgToString.class && aClass!=Object.class){
            Field[] fields = aClass.getDeclaredFields();
            for (Field f :fields) {
                StringHidden hiddenClass = f.getAnnotation(StringHidden.class);
                if (hiddenClass!=null){
                    stringList.add(f.getName());
                }
            }
            aClass = aClass.getSuperclass();
        }
        String s = ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

        String s1 = new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
                .setExcludeFieldNames(stringList.toArray(new String[stringList.size()])).toString();
        return s1;
    }
}

需要打印toString方法的 直接继承侧类就可以了

这里写图片描述

隐藏类:


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface StringHidden { }

如果不想打印某一个属性可以用注解隐藏

这里写图片描述

猜你喜欢

转载自blog.csdn.net/male09/article/details/80726522
今日推荐