java实体类重写new方法_java实体类重写toString()方法

实体类一般需要重写toString()方法,在打印日志时输出参数的信息。但是如果手动拼接实体类里每个属性和属性值又比较麻烦,以下是常用的几种方法。

利用Apache工具类ToStringBuilder

//方法1 输出对象名称简写 属性 属性值(我常用这种方式)

@OverridepublicString toString() {

returnToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

如果输出信息想过滤掉某些特殊字段,如password,可以采用如下方式:

@OverridepublicString toString() {return(newReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) {

@Overrideprotected booleanaccept(Field f) {

return super.accept(f) && !f.getName().equalsIgnoreCase("password"); //过滤掉特殊字段

}

}).toString();

}

ToStringBuilder工具类还有以下几种显示方式:

/对象及其属性一行显示

ToStringBuilder.reflectionToString(this);

ToStringBuilder.reflectionToString(u, ToStringStyle.DEFAULT_STYLE)

//属性换行显示

ToStringBuilder.reflectionToString(u, ToStringStyle.MULTI_LINE_STYLE)

//不显示属性名,只显示属性值,在同一行显示

ToStringBuilder.reflectionToString(u, ToStringStyle.NO_FIELD_NAMES_STYLE)

//对象名称简写

ToStringBuilder.reflectionToString(u, ToStringStyle.SHORT_PREFIX_STYLE)

//不显示对象名称 只显示属性

ToStringBuilder.reflectionToString(u, ToStringStyle.SIMPLE_STYLE)

--------------------------------------------------------------------------------------------

另一种重写toString()的方法是利用反射机制,获取实体类的所有属性和方法,实现如下:

public class ToStringUtil{

/**

* 输出指定的某些字段fieldName, 如果不填则输出所有字段

* @param entity

* @param fieldName

* @return

*/

public static String toString(Entity entity, String... fieldName)

{

Class cls = entity.getClass();

StringBuffer buffer = new StringBuffer(cls.getSimpleName() + ": ");

try

{

//不获取私有方法

Method[] methods = cls.getMethods();

if(null != fieldName && fieldName.length != 0)

{

for(Method method: methods)

{

String mn = method.getName();

for(String fn: fieldName)

{

if(mn.equalsIgnoreCase("get" + fn))

{

String value = method.invoke(entity).toString();

buffer.append(mn + "=" + value + " &");

}

}

}

}

else

{

//得到所有field

Field[] fields = cls.getDeclaredFields();

for(Method method: methods)

{

String mn = method.getName();

for(Field field: fields)

{

String name = field.getName().toString();

if(mn.equalsIgnoreCase("get" + name))

{

String value = method.invoke(entity).toString();

buffer.append(name + "=" + value + " &");

}

}

}

}

}

catch(Exception e)

{

e.printStackTrace();

}

return buffer.substring(0, buffer.length()-1).toString();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值