带你查看不一样的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 { }