繁体   English   中英

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

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

为一些简单的类自动生成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);
}

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

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

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

我会考虑使用 Apache Commons ToStringBuilder

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

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

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

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

例如,使用 eclipse 生成 toString 而不是使用它更好的原因是,如果您稍后添加、删除或更改类的属性,您还必须重新生成 toString。 如果您使用lombok ,则不必这样做。

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

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

如果可能,不要调用类的其他方法。 至少,请确保您的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);
           }

       }

}

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

按 alt + 插入生成弹出窗口

选择字段并保持默认模板不变

生成到字符串函数

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


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


  1. Alt + Shift + S + S (双)
  2. 右键单击-> 源 -> 生成 toString() ...
  3. 转到源菜单-> 生成 toString() ...
  4. 转到Windows 菜单-> 首选项 -> 常规 -> 键(在文本字段上写入 Generate toString)

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

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

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

它的样子是:

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

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

考虑到包括@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 
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM