聲明:遷移自本人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();
}
}
其實自動生成器的模板可以跟着例子調成自己想要的樣子。主要是要學會舉一反三。