toString方法的IntelliJ Idea模板,使用String.format而不是串联

o3imoua4  于 2023-10-15  发布在  IntelliJ IDEA
关注(0)|答案(2)|浏览(119)

我想为toString方法创建IntelliJ Idea模板,使用String.format而不是连接,StringBuffer等。
例如,我有以下对象:

public class Foo {
    private int id;
    private String name;
    private List<String> values;
}

如果我默认为所有字段生成toString,Idea将生成:

@Override
public String toString() {
    return "Foo{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", values=" + values +
            '}';
}

但我想生成以下内容:

@Override
public String toString() {
    return String.format("Foo(id=%d, name=%s, values=%s)", id, name, values);
}
pjngdqdw

pjngdqdw1#

对于任何还在寻找这个的人:

public java.lang.String toString() {
return String.format(
"$classname (##
#set ($i = 0)
#foreach ($member in $members)
#if ($i != 0)##
, ##
#end
$member.name=%s##
#set ($i = $i + 1)
#end
)",##
#set ($i = 0)
#foreach ($member in $members)
    #if ($i != 0)
    ,##
    #end
    #if ($member.primitiveArray || $member.objectArray)
    java.util.Arrays.toString(this.$member.name)##
    #else
    this.$member.name ##
    #end
    #set ($i = $i + 1)
#end
);
}

改编自this template
编辑
对于那些想知道这是什么东西的人(我想知道你是如何在这里结束的,因为这个问题非常具体XD):这是一个用于生成toString方法的IntelliJ模板。
代码生成帮助您根据预设模板生成代码构造和重复元素,而不是手工编写所有内容。
请阅读更多here和这里的toString具体。

wlsrxk51

wlsrxk512#

它将生成JSON格式的toString。

public java.lang.String toString() {
#if ( $members.size() > 0 )
#set ( $i = 0 )
return "{\"$classname\":{"
#foreach( $member in $members )
#if ( $i == 0 )
+ "##
#else
+ ", ##
#end
#if ( $member.array )
\"$member.name\":" + java.util.Arrays.toString($member.accessor)
#elseif ( $member.string || $member.primitive || $member.numeric || $member.boolean || $member.enum )
\"$member.name\":\"" + $member.accessor + "\""
#else
\"$member.name\":" + $member.accessor
#end
#set ( $i = $i + 1 )
#end
+ "}}";
#else
return "{$classname}";
#end
}

相关问题