声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635

Java POJO在日志中常会用于打印,经常会将POJO的内容全部或部分打印出来,所以POJO类的toString()方法常要重写。

现在举一个例子

package com.test.lang;

public class SelfDefinedToString
{
	String name;
	
	int age;
	
	String country;
	
	String occupation;
	
	@Override
	public String toString() {
		return "SelfDefinedToString{" +
				"name='" + name + '\'' +
				", age=" + age +
				", country='" + country + '\'' +
				", occupation='" + occupation + '\'' +
				'}';
	}
}

如果直接使用IDEA默认的自动代码生成器生成toString(),可能如上所示,其中使用了大量的字符串拼接,这样会产生很多的临时字符串对象,如果打印很多的话,对效率有不良影响。当然,IDEA已经给了我们一些备选项。如下图所示
在这里插入图片描述
IDEA自带的这些toString()生成模板,其实也透露出了一些语法规则。然后可以自己写一个模板出来。

/**
* {@inheritDoc}
*/
@Override
public java.lang.String toString()
{
final java.lang.StringBuilder sb = new java.lang.StringBuilder("$classname").append('[')
#set ($i = 0)
#foreach ($member in $members)
    #if ($i == 0)
        #if ($member.string)
        .append("$member.name=")
        #else
        .append("$member.name=")
        #end
    #else
        #if ($member.string)
        .append(",$member.name=")
        #else
        .append(",$member.name=")
        #end
    #end
    #if ($member.primitiveArray)
    if ($member.name == null)
    .append("null")
    else {
    .append('[');
    for (int i = 0; i < $member.name .length; ++i)
    .append(i == $member.name .length -1 ? "" : ", ").append($member.name [i])
    .append(']');
    }
    #elseif ($member.objectArray)
    .append($member.name == null ? "null" : java.util.Arrays.asList($member.name).toString())
    #elseif ($member.string)
    .append($member.accessor)
    #else
    .append($member.accessor)
    #end
    #set ($i = $i + 1)
#end
.append(']');
return sb.toString();
}

再看生成的代码

package com.test.lang;

public class SelfDefinedToString
{
	String name;
	
	int age;
	
	String country;
	
	String occupation;
	
	/**
	 * {@inheritDoc}
	 */
	@Override
	public String toString() {
		final StringBuilder sb = new StringBuilder("SelfDefinedToString").append('[')
				.append("name=")
				.append(name)
				.append(",age=")
				.append(age)
				.append(",country=")
				.append(country)
				.append(",occupation=")
				.append(occupation)
				.append(']');
		return sb.toString();
	}
}

其实自动生成器的模板可以跟着例子调成自己想要的样子。主要是要学会举一反三。