用反射方法的优点:
代码简洁,不需要有什么配置Model属性有变化时不必再手动更改toString方法缺点:
有些属性并不想让输出来(可能没用,也可能出于安全方面考虑),但是反射时所有的属性值都给输出来
安全方面的考虑. 一般来说,一个java类是的属性都是PRivate的,这样用反射来构建toString方法时,就得绕过private的限制. 于是 If your system is running under a restrictive SecurityManager , you may need to alter your configuration to allow Commons Lang to bypass these security restrictions.
弥补用反射方法不够灵活的一个扩展. 由假设一个类里有名为passWord这样的属性,一般情况下,是不想让toString输入的, 但用反射默认情况下是会输出的. 这怎么办呢?看ReflectionToStringBuilder源码里文档时,发现这么一个扩展: 通过子类,覆盖其accept方法来加以筛选.具体如下所示:
public String toString() { return (new ReflectionToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) {// 注意这里为了表达上的简洁用了匿名内部类. protected boolean accept(Field f) { return super.accept(f) && !f.getName().equals("password"); } }).toString();}这样在toString时, 就会跳过名为password的属性.
新闻热点
疑难解答