IDEA:我想自己写一个 toString 模板,以后 alt+insert 选中 toString 方法,再选中我做的模板,以后就能自动生成我想要的 tostring 方法..但 IDEA 里这个东西我实在看不懂啊..

2018-05-11 18:10:58 +08:00
 Newyorkcity

打开方法(直接看我下面给的生成效果和模板研究也行..):
IDEA→在一个类内部→alt+insert→选中 toString(),估计其它方法也可以,回车→在选择成员界面右上角 setting→templates 选项卡→左侧目录上面有个绿色的加号


对这样一个类
public class product {
    private String code;
    private String description;
    private double price;
}
用如下模板进行 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.objectArray )
#if ($java_version < 5)
$member.name=" + ($member.accessor == null ? null : java.util.Arrays.asList($member.accessor)) +
#else
$member.name=" + java.util.Arrays.toString($member.accessor) +
#end
#elseif ( $member.primitiveArray && $java_version >= 5)
$member.name=" + java.util.Arrays.toString($member.accessor) +
#elseif ( $member.string )
$member.name='" + $member.accessor + '\'' +
#else
$member.name=" + $member.accessor +
#end
#set ( $i = $i + 1 )
#end
    '}';
#else
    return "$classname{}";
#end
}
效果如下:
    public String toString() {
        return "product{" +
                "code='" + code + '\'' +
                ", description='" + description + '\'' +
                ", price=" + price +
                '}';
    }

那个,我想实现的 toString 方法是这样的
    public String toString() {
        return super.toString() +
                "code='" + code + '\'' +
                ", description='" + description + '\'' +
                ", price='" + price +  '\''  ;
    }
也不用搞的像 IDEA 那么严谨完美...该如何写呢?谢谢
1976 次点击
所在节点    问与答
3 条回复
yestodayHadRain
2018-05-11 18:52:07 +08:00
直接封装成一个工具类,来调用不就好了
shootsoft
2018-05-11 21:20:42 +08:00
IDEA 里面的模版用的是 Velocity http://velocity.apache.org
shootsoft
2018-05-11 21:33:05 +08:00
不是有一个模版叫 “ String concat (+) and super.toString() ” 了吗?不过根据你的需求,你要的大概就是这个样子的吧:

```
public java.lang.String toString() {
#if ( $members.size() > 0 )
#set ( $i = 0 )
return super.toString() +
#foreach( $member in $members )
#if ( $i == 0 )
"##
#else
", ##
#end
#if ( $member.objectArray )
#if ($java_version < 5)
$member.name=" + ($member.accessor == null ? null : java.util.Arrays.asList($member.accessor)) +
#else
$member.name=" + java.util.Arrays.toString($member.accessor) +
#end
#elseif ( $member.primitiveArray && $java_version >= 5)
$member.name=" + java.util.Arrays.toString($member.accessor) +
#elseif ( $member.string )
$member.name='" + $member.accessor + '\'' +
#else
$member.name=" + $member.accessor +
#end
#set ( $i = $i + 1 )
#end
'}';
#else
return super.toString();
#end
}

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454137

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX