IntelliJ IDEA 2025.2 Help

生成代码

IntelliJ IDEA 提供多种生成常用代码构造和重复元素的方法,帮助您提高生产力。 这些可以是创建新文件时使用的 文件模板 、根据上下文不同应用的自定义或预定义 实时模板 、各种包装器或字符的自动配对。

此外,IntelliJ IDEA 提供 代码补全Emmet支持。

本主题介绍了生成特定于 Java 的标准代码结构的方法:构造函数、方法重写和实现、getter 和 setter 等。 前往 代码 | 生成 Alt+Insert 以打开可生成构造的弹出菜单。

这里有一段视频演示了如何在 IntelliJ IDEA 中生成各种代码结构:

生成构造函数

IntelliJ IDEA 可以生成一个构造函数,该构造函数使用相应参数的值来初始化特定类字段。

为类生成构造函数

  1. 在主菜单中,转到 代码 并选择 生成 (Alt+Insert)。

  2. 生成 弹出窗口中,点击 构造函数

  3. 如果类包含字段,请选择要由构造函数初始化的字段,然后点击 OK

以下代码片段显示了为类生成构造函数的结果:

public class MyClass { int aInteger; double bDouble; public MyClass(int myAIntegerParam, double myBDoubleParam) { aInteger = myAIntegerParam; bDouble = myBDoubleParam; } }

生成委托方法

IntelliJ IDEA 可以生成将行为委托给您类的字段或方法的方法。 这种方法使得在不直接暴露字段或方法的情况下,可以访问字段或方法的数据。

为类生成委托方法

  1. 在主菜单中,转到 代码 并选择 生成 (Alt+Insert)。

  2. 生成 弹出窗口中,点击 委托方法

  3. 选择目标字段或方法,然后点击 OK

  4. 选择您希望委托的方法,然后点击 OK

以下代码片段显示了在另一个类中委托 get(i) 方法和 Calendar 类的结果:

Calendar calendar; public int get(int i) { return calendar.get(i); }

生成 equals() 和 hashCode() 方法

Java 超类 java.lang.Object 提供了两种用于比较对象的方法:

  • public boolean equals(Object obj) 返回 true 如果传递给它作为参数的对象与调用此方法的对象 相等。 默认情况下,这意味着两个对象存储在相同的内存地址中。

  • public int hashCode() 返回调用此方法的对象的哈希码值。 在应用程序的一次执行过程中,哈希码不得更改,但在执行之间可能会更改。

为类生成 equals() 和 hashCode()

  1. 在主菜单中,转到 代码 并选择 生成 (Alt+Insert)。

  2. 生成 弹出窗口中,点击 equals() and hashCode()

  3. 模板 列表中选择一个 velocity 模板。

    您还可以点击 模板设置 打开 模板对话框,在那里您可以选择一个现有的模板或 创建一个自定义模板

  4. 在方法内选择生成的表达式。 将鼠标悬停在问号图标上,以打开提示框,了解每个表达式的优缺点。

    生成 equals() 和 hashCode() 向导
  5. 点击 下一步

  6. 请选择应当用于确定相等性的字段,然后点击 下一步

  7. 选择要用于计算哈希码值的字段。 您只能从上一步中选择的字段中进行选择(用于确定相等性)。 点击 下一步

  8. 选择包含非空值的字段。 此可选步骤有助于生成的代码避免空值检查,从而提高性能。 点击 完成

以下代码段显示了覆盖 equals()hashCode() 方法的结果:

public boolean equals(Object o){ if(this==o)return true; if(o==null||getClass()!=o.getClass())return false; FixedRateCurrencyExchangeService that=(FixedRateCurrencyExchangeService)o; if(Double.compare(that.rate,rate)!=0)return false; return true; } public int hashCode(){ long temp=rate!=+0.0d?Double.doubleToLongBits(rate):0L; return int(temp^(temp>>>32)); }

Generate getters and setters

IntelliJ IDEA 能为您类中的字段生成存取器和变异器方法(getterssetters)。 生成的方法只有一个参数,这是由 JavaBeans API 规定的。

getter 和 setter 方法的名称是由 IntelliJ IDEA 根据您的 代码生成命名偏好设置生成的。

  1. 在主菜单中,转到 代码 并选择 生成 (Alt+Insert)。

  2. 生成 弹出窗口中,点击以下其中一项:

    • Getter 以生成访问器方法来获取类字段的当前值。

    • Setter 用于生成设置类字段值的变异方法。

    • Getter 和 Setter 以生成访问器和修改器方法。

  3. 请选择要为其生成 getter 或 setter 的字段,然后点击 OK

    您可以通过点击 浏览按钮 添加自定义 getter 或 setter 方法 ,并访问 Getter/Setter Templates对话框。 如果某个字段不在列表中,那么相应的 getter 和 setter 方法已经为其定义。

    如果选择了 复制所有注释 选项,则所有适用的注解都会从字段复制到新方法或新方法的参数中。 否则,仅适用的可空性注解将被复制。

以下代码片段展示了为一个包含一个字段的类生成 getter 与 setter 方法的结果 var

public class MyClass { int field; public int getField() { return field; } public void setField(int field) { this.field = field; } }

生成 toString()

Java 超类的 toString() 方法 java.lang.Object 返回对象的字符串表示形式。 此方法可用于将任何对象打印到标准输出,例如,快速监控您的代码执行情况。 默认情况下, toString() 返回类的名称,后跟对象的哈希码。 您可以重写它以返回对象字段的值,这样对于您的需要来说可能会更具信息性。

为类重写 toString() 方法

  1. 代码 菜单上,点击 生成 Alt+Insert

  2. 生成 弹出窗口中,点击 toString()

  3. 配置以下内容:

    • 请选择从 模板 列表生成 toString() 方法的模板。

    • 选择您想在生成的 toString() 方法中返回的字段。 默认情况下,所有可用字段都被选中。 点击 选择“无” 生成一个 toString() 方法,该方法仅返回类名。

    • 如有必要,请选中 插入 @Override 复选框。

    • 点击 设置 按钮以打开 toString() 生成设置对话框。 您可以调整行为并 添加自定义模板

  4. 点击 OK

如果类中已定义 toString() 方法,默认情况下会提示您是否希望在继续之前删除此方法。 您可以使用 当方法已存在时 选项组在 toString() Generation Settings 对话框中更改此行为:可以自动替换现有方法或生成重复方法。

以下代码片段显示了一个定义了多个字段的类生成 toString() 方法的结果:

public class MyClass { private String name; private String url; private int port; private String[] validIPs; ... public String toString() { return "MyClass{" + "name='" + name + '\'' + ", url='" + url + '\'' + ", port=" + port + ", validIps=" + Arrays.toString(validIps) + '}'; } ... }

以下 代码检查toString() 方法相关:

  • 该类未重写“toString()”方法 可用于识别未定义 toString() 方法的类。 此检查使用 exclude settings忽略不应被转储的字段的类。 另一项设置是使用正则表达式匹配类名来排除某些类。 默认情况下,该选项用于排除任何异常类。

  • 字段未在“toString()” 方法中使用 可用于识别在 toString() 方法中未转储的字段。 例如,如果您向类中添加了新字段,但忘记将其添加到 toString() 方法中。 更改此检查的严重性 以将错误显示为警告。 这将在编辑器中突出显示任何未使用的字段,并在滚动条上以黄色标记指示其位置。

自定义代码生成模板

用于生成 getter 和 setter 的模板,以及 equals()hashCode()toString() 方法的模板都是用 Velocity 模板语言编写的。 虽然您无法修改预定义模板,但您可以添加自己的自定义模板以实现必要的行为。

IntelliJ IDEA 为 Velocity 模板提供了以下变量:

以下变量可用于生成 getters 和 setters 的模板:

变量

描述

$java_version

当前版本的 Java 运行环境 (JRE)。

$class

当前类。

$helper

提供对各种代码生成辅助方法的访问。

$settings

提供根据当前代码样式格式化名称的功能。

$field

为其生成 getter 或 setter 的字段。

以下变量可用于生成 toString() 方法的模板:

变量

描述

$java_version

当前版本的 Java 运行环境 (JRE)。

$class

当前类。

$helper

提供对各种代码生成辅助方法的访问。

$settings

提供根据当前代码样式格式化名称的功能。

$fields

当前类中的字段列表。

以下变量可用于生成 equals() 方法的模板:

变量

描述

$java_version

当前版本的 Java 运行环境 (JRE)。

$class

当前类。

$helper

提供对各种代码生成辅助方法的访问。

$settings

提供根据当前代码样式格式化名称的功能。

$fields

当前类中的字段列表。

$instanceBaseName

调用 equals() 方法的对象的预定义名称。

$baseParamName

equals() 方法参数的预定义名称。

$superParamName

适用时,在超类的 equals() 方法中的参数名。

$checkParameterWithInstanceof

从向导处传递的选项。

$superHasEquals

是否已声明 equals() 的超类。

以下变量可用于生成 hashCode() 方法的模板:

变量

描述

$java_version

当前版本的 Java 运行环境 (JRE)。

$class

当前类。

$helper

提供对各种代码生成辅助方法的访问。

$settings

提供根据当前代码样式格式化名称的功能。

$fields

当前类中的字段列表。

$superHasHashCode

是否已声明 hashCode() 的超类。

效率提示

使用代码补全

根据当前上下文,IntelliJ IDEA 可以在 代码补全弹出窗口中建议生成相关代码结构。 例如,当文本光标位于 Java 类中时,代码补全弹出窗口将包含对添加 getters、setters、 equals()hashCode()toString() 方法的建议。

在代码补全弹出窗口中生成 getters 和 toString()
    最后修改日期: 2025年 9月 22日