操作實踐,IDEA自定義toString()方法模板


聲明:遷移自本人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();
	}
}

其實自動生成器的模板可以跟着例子調成自己想要的樣子。主要是要學會舉一反三。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM