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

时间:2010-04-16 13:36:02

标签: 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);
}

9 个答案:

答案 0 :(得分:39)

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

要回答一个关于自动生成toString()是不是一个坏习惯的问题,我的意见是,事实并非如此。如果生成的代码与您自己编写的代码非常相似,那么为什么还要打字呢?

答案 1 :(得分:31)

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

我会考虑使用Apache Commons ToStringBuilder

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

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

使用此方法,如果/何时添加字段,则无需更新toString方法。

答案 2 :(得分:10)

如果你使用lombok,他们会有一个@ToString注释,它会为你生成toString。

为什么使用eclipse而不是使用eclipse生成toString更好的原因是,如果稍后添加,删除或更改类的属性,则还必须重新生成toString。如果您使用lombok,则无需执行此操作。

答案 3 :(得分: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);
           }

       }

}

答案 4 :(得分:2)

在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

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

答案 5 :(得分:1)

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

  1. Alt + Shift + S + S (双倍)
  2. 右键点击 - >来源 - >生成toString()...
  3. 转到来源菜单 - >生成toString()...
  4. 转到 Windows菜单 - >偏好 - >一般 - >键(在文本字段上写入生成toString)

答案 6 :(得分:0)

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

toString()的默认JDK实现会生成开发人员信息,所以这通常是我推荐的模式(如果可能的话),但是如果你正在处理一个具有不同想法/期望的项目,你可能会感到困惑......

答案 7 :(得分:0)

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

它的样子是:

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

它是调试的好方法,不需要额外的库。

答案 8 :(得分:0)

考虑到包括@Steve在内的一些旧答案,我想根据最新库添加答案。

添加依赖项

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>

在您的课堂上

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

public class User {
     ... 

     @Override
     public String toString() {
          return ReflectionToStringBuilder.toString(this);
     }
}

您可以排除以下某些字段

    ... 
    @Override
    public String toString() {
        return ReflectionToStringBuilder.toStringExclude(this, "name"); // Name will be excluded from toString output 
    }