V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

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

  •  
  •   Newyorkcity · 2018-05-11 18:10:58 +08:00 · 2028 次点击
    这是一个创建于 2391 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打开方法(直接看我下面给的生成效果和模板研究也行..):
    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 那么严谨完美...该如何写呢?谢谢
    3 条回复    2018-05-11 21:33:05 +08:00
    yestodayHadRain
        1
    yestodayHadRain  
       2018-05-11 18:52:07 +08:00
    直接封装成一个工具类,来调用不就好了
    shootsoft
        2
    shootsoft  
       2018-05-11 21:20:42 +08:00 via iPhone   ❤️ 1
    IDEA 里面的模版用的是 Velocity http://velocity.apache.org
    shootsoft
        3
    shootsoft  
       2018-05-11 21:33:05 +08:00   ❤️ 1
    不是有一个模版叫 “ 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
    }

    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3291 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.