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

Gor*_*don 28 java automation tostring

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

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

private String name;
private int age;
private double height;

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

Dón*_*nal 43

Eclipse 3.5.2(可能还有早期版本)已经提供了这个功能.如果在编辑器中右键单击,您将在Source - > Generate toString()下找到它...

为了回答你关于自动生成是不好的问题toString(),我的观点是它不是.如果生成的代码与您自己编写的代码非常相似,那么为什么还要打字呢?

  • 国际海事组织,这没有回答这个问题 - OP正在询问它是否是*最佳实践*,而这个答案中没有提到.. (3认同)

Ste*_*eve 34

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

我会研究使用Apache Commons ToStringBuilder.

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

public String toString() {
   return ToStringBuilder.reflectionToString(this);
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,如果/添加字段,则不必更新toString方法.

  • !!! 仅供参考:使用反射会使函数变慢一个数量级。意识到 !! (2认同)

She*_*ari 11

如果您使用的龙目岛,他们有一个@ToString注释,这将产生的toString你.

之所以使用它而不是使用eclipse生成toString更好的原因是,如果你以后添加,删除或更改类的属性,你还必须重新生成toString.如果你使用lombok,你不必这样做.


leo*_*loy 5

添加史蒂夫和唐的答案(+1为他们):

使你的toString()方法简单,确保它不会触发预期(特别是要注意可能为null的字段).

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

并注意愚蠢的异常toString循环:

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);
           }

       }

}
Run Code Online (Sandbox Code Playgroud)