IntelliJ IDEA生成toString()方法
IntelliJ IDEA 生成 toString()的操作可以创建或更新 toString() 方法。
bean 通常需要将其字段值转储为调试目的,而为其编写转储代码则相当繁琐。该生成 toString()操作能够生成 toString() 方法,以简单的方式转储所有字段。
IntelliJ IDEA 生成 toString()方法
tip:如果在 IntelliJ IDEA 中toString()方法已经存在于类中,则在继续操作之前,将提示您删除此方法,具体取决于方法的值是否已存在设置( 生成 toString()设置对话框)。
- 打开所需的类进行编辑,然后执行以下操作之一:
- 在主菜单上选择代码|生成(Code | Generate)。
- 右键单击编辑器,然后在上下文菜单中选择 "生成"。
- 按 Alt+Insert。
- 从显示的弹出列表中选择 toString()选项。 生成 toString()向导将显示类中的字段列表。
- 在向导中,指定以下内容:
-
选择要用于生成
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{}";