IntelliJ IDEA生成toString()方法

2018-10-17 09:19 更新

IntelliJ IDEA 生成 toString()的操作可以创建或更新 toString() 方法。

bean 通常需要将其字段值转储为调试目的,而为其编写转储代码则相当繁琐。该生成 toString()操作能够生成 toString() 方法,以简单的方式转储所有字段。

IntelliJ IDEA 生成 toString()方法

tip:如果在 IntelliJ IDEA 中toString()方法已经存在于类中,则在继续操作之前,将提示您删除此方法,具体取决于方法的值是否已存在设置( 生成 toString()设置对话框)。
  1. 打开所需的类进行编辑,然后执行以下操作之一:
    • 在主菜单上选择代码|生成(Code | Generate)。
    • 右键单击编辑器,然后在上下文菜单中选择 "生成"。
    • 按 Alt+Insert。
  2. 从显示的弹出列表中选择  toString()选项。  生成 toString()向导将显示类中的字段列表。
  3. 在向导中,指定以下内容:
    • 选择要用于生成toString()方法的字段。

      默认情况下,所有可用的字段都被选中。点击按钮选择“无结果”,只添加一个由方法声明和 return 语句组成的 toString () 方法。

    • 从"模板" 下拉列表中选择生成 toString () 方法所需的方法。
    • 如果有需要,请选中 "插入 @Override" 复选框。

      有关详细信息,请参阅 "生成 toString ()" 部分对话框。

    • 如果您对设置不满意,请单击“设置”按钮。这样可以显示出来 toString()生成设置对话框, 其中一个可以调整函数的行为。有关详细信息,请参阅 "生成 toString () 设置" 对话框。

    准备好后,点击“确定”。

检查

在节点 toString () 问题下有两个相关的代码检查:

  • 类不覆盖 'toString()' 方法
  • 字段未用于 'toString()' 方法

检查类不覆盖 toString()方法可用于标识可能忘记添加 toString() 方法的任何类 。此检查使用“排除”设置以忽略不应转储的字段的类。其他设置是通过使用与其类名匹配的正则表达式来排除某些类。默认情况下,此选项用于排除任何异常(Exception)类。

检查 'toString()' 方法中未使用的字段:此检查可用于标识不同步(out-of-synchronization)的情况,您可以使用现有的 toString() 方法来转储字段。但是,稍后将某些字段添加到该类中,并且这些新字段不会在 toString() 方法中被转储 。 通过使其能够将错误显示为警告来更改此检查的严重性。这将在编辑器中突出显示任何未使用的字段;右侧将使用黄色标记指示错误的位置。

记录

Log4j 用于日志记录。要启用日志记录,请打开以编辑 IntelliJ IDEA 使用的  log.xml 文件。该文件位于 IntelliJ IDEA 安装的 bin 文件夹中。将以下行添加到此文件中:

<category name="org.jetbrains.generate.tostring">
  <priority value="DEBUG"/>
  <appender-ref ref="FILE"/>
</category>

IntelliJ IDEA 生成 toString() 实例

基本代码

请考虑以下代码:

public class MyServerConfigBean {
   private String name;
   private String url;
   private int port;
   private String[] validIPs;
   ...
      }

将插入符号放在类中的某处,按 Alt+Insert,然后从弹出列表中选择 toString()。以下的方法现在会添加到 bean 中:

public String toString() {
  return "MyServerConfigBean{" +
    "name='" + name + '\'' +
    ", url='" + url + '\'' +
    ", port=" + port +
    ", validIps=" + Arrays.toString(validIps) +
    '}';
}

启用 Getter

请考虑以下代码:

public class MyServerConfigBean {
  private String name;
  private String url;
  private int port;
  private String[] validIPs;
...
public String getServerAddress() {
  return url + ":" + port;
        }
...
}

将插入符号放在类中某处,按 Alt+Insert,然后从弹出列表中选择 toString()。调用操作后生成 toString () ,结果为:

public String toString() {
   return "MyServerConfigBean{" +
   "name='" + name + '\'' +
   ", url='" + url + '\'' +
   ", port=" + port +
   ", serverAddress='" + getServerAddress() + "'" +
   ", validIps=" + Arrays.toString(validIps) +
   '}'
   }

排除字段和方法

通常您不想在 toString () 方法中添加常量字段作为调试信息。所以你可以选中该复选框排除常量字段,并防止输出中的常量字段。除此之外,您还可以按字段的名称进行筛选,以排除一个内部调试字段。所以,在文本字段中键入 ^ debug,以名称 (reg exp) 排除字段,以防止调试字段。

下面的示例显示了排除字段的结果。原来的代码是:

public class MyServerConfigBean {
    private final static String USERNAME = "scott";
    private final static String PASSWORD = "tiger";
    private String name;
    private String url;
    private int port;
    private String[] validIPs;
    ...
    public String getServerAddress() {
    return url + ":" + port;
    private boolean debug = true;
    }
    ...
    }

生成一个 toString() 方法后,代码如下所示:

public String toString() {
    return "MyServerConfigBean{" +
    "name='" + name + '\'' +
    ", url='" + url + '\'' +
    ", port=" + port +
    ", validIps=" + Arrays.toString(validIps) +
    '}'
}

如您所见,在生成的代码中不使用常量字段(USERNAME,PASSWORD)。正则表达式排除调试字段。排除的字段不会出现在生成 toString()对话框中。

要排除方法,请选中 "按名称 (reg exp)" 字段排除 "方法" 复选框。例如,如果您键入 ^getCausedBy.* 文本字段通过按名称(reg exp)排除方法,您将因此阻止以 getCausedBy 开头的方法的输出。

JavaDoc

可以将 JavaDoc 注释添加到生成的 toString () 方法中。这是通过在速度模板中插入 JavaDoc 注释来完成的。请参见下面的模板示例:

/**
* Insert your JavaDoc comments here
*
* @return a string representation of the object.
*/
return "$classname{}";
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号