关于Java:在Eclipse中自动生成toString方法的快捷方式是什么?

What are the shortcut to Auto-generating toString Method in Eclipse?

为一些简单的类自动生成toString方法的好还是坏做法?

我正在考虑生成类似下面的内容,该内容采用变量名称并生成一个toString方法,该方法打印名称及其后的值。

1
2
3
4
5
6
7
private String name;
private int age;
private double height;

public String toString(){
   return String.format("Name: %s Age: %d Height %f", name, age, height);
}


Eclipse 3.5.2(可能还有更早的版本)已经提供了此功能。如果在编辑器中右键单击,则会在"源"->"生成toString()..."下找到它。

要回答有关自动生成toString()是否是不好的做法的问题,我认为不是。如果生成的代码与您自己编写的代码非常相似,那么为什么还要打个出来呢?


我个人喜欢为所有对象实现toString方法,因为它有助于调试。

我会考虑使用Apache Commons ToStringBuilder。

您可以使用反射实现一个简单的toString方法,如下所示:

1
2
3
public String toString() {
   return ToStringBuilder.reflectionToString(this);
}

使用此方法,如果/当添加字段时,您将不必更新toString方法。


如果您使用lombok,则它们具有@ToString批注,它将为您生成toString。

之所以用它代替使用eclipse生成toString更好,是因为如果以后添加,删除或更改类的属性,还必须重新生成toString。如果您使用龙目岛,则不必这样做。


要添加到史蒂夫和唐的答案(+1):

使您的toString()方法简单,确保它永远不会触发期望(尤其要注意可能为null的字段)。

如果可能的话,不要调用类的其他方法。至少,请确保您的toString()方法不会修改您的对象。

并且要注意愚蠢的exception-toString循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyClass {
       ...
       public String toString() {
          // BAD PRACTICE 1: this can throw NPE - just use field1
            return" field1=" + field1.toString()
                +" extraData=" + getExtraData();
          // BAD PRACTICE 2: potential exception-toString loop
       }

       public MyExtraData getExtraData() {
           try {
           .... do something
           } catch(Exception e) {
              throw new RuntimeException("error getting extradata -" + this.toString(),e);
           }

       }

}

在IntelliJ Idea中,您可以按alt + insert,将打开Generate弹出窗口;现在选择字段并单击确定按钮;而已。

Generate Popup by pressing alt + insert

Select Fields and keep the default template as such

the generated to string function

进一步的提示:在"生成toString"对话框中,您可以通过单击模板组合框上的下拉菜单来选择模板。如果需要,您可以在此处选择StringBuffer或根据需要选择任何其他模板。玩以习惯。我喜欢 :)


生成toString()方法的快捷方式

  • 按Alt + Shift + S + S(两次)
  • 右键单击->源->生成toString()...
  • 转到源菜单->生成toString()...
  • 转到Windows菜单->首选项->常规->键(在文本字段上写Generate toString)

  • 刚刚注意到-在NetBeans IDE中,您可以通过选择要为right click->insert code生成字段的字段来生成toString()方法,或者使用快捷方式ALT+INSERT,然后选择toString()。

    它的外观是:

    1
    2
    3
    4
    @Override
    public String toString() {
        return"ClassName{"+"fieldName="+fieldName+'}';
    }

    它是调试的绝佳方法,不需要其他库。


    添加toString()时要注意生成的文本的受众。一些框架使用toString()方法生成最终用户可见的文本(例如某些Web框架),而许多人使用toString()方法生成调试/开发人员信息。无论哪种方式,请确保您在toString实现中具有足够的唯一性以满足您的要求。

    toString()的默认JDK实现会生成开发人员信息,因此,如果可能的话,通常使用我推荐的模式,但是如果您正在以不同的想法/期望进行项目,则可能会感到困惑...