生成代码
最后修改时间:2023 年 9 月 8 日代码| 生成或AltInsert
IntelliJ IDEA 提供了多种方法来生成通用代码结构和重复元素,这有助于您提高工作效率。这些可以是创建新文件时使用的文件模板、根据上下文、各种包装器或自动字符配置以不同的方式应用自定义或预定义实时模板的方式。
此外,IntelliJ IDEA 还提供代码补全和Emmet支持。
本主题描述生成特定于 Java 的标准构造代码的方法:构造函数、方法覆盖和实现、getter 和 setter 等等。转到菜单|生成代码以打开弹出,其中包含您可以生成的可用结构 。AltInsert
以下视频演示了如何在IntelliJ IDEA中生成各种代码结构:
构造生成函数
IntelliJ IDEA 可以生成一个构造函数,该构造函数使用相应参数的值初始化特定的类字段。
为类生成构造函数
在“代码”菜单上,单击“生成” 。AltInsert
在“生成”弹出窗口中,单击“构造函数”。
如果类包含字段,请选择要由构造函数初始化的字段,然后单击“确定”。
以下代码片段显示了为类生成构造函数的结果:
公共类 MyClass { int aInteger;双b双;公共 MyClass(int myAIntegerParam, double myBDoubleParam) { aInteger = myAIntegerParam; bDouble = myBDoubleParam; } }
生成委托方法
IntelliJ IDEA 可以生成将行为委托给类的字段或方法的方法。该方法使得可以访问字段或方法的数据,而直接填充该字段或方法。
为类生成委托方法
在“代码”菜单上,单击“生成” 。AltInsert
在“生成”弹出窗口中,单击“委托方法”。
选择目标字段或方法,然后单击“确定”。
选择需要委派的方法并单击“确定”。
get(i)
以下代码片段显示了将类的方法委托给Calendar
另一类的结果:
日历日历;公共 int get(int i) { return calendar.get(i); }
生成 equals() 和 hashCode() 方法
Java超类java.lang.Object
提供了两种比较对象的方法:
public boolean equals(Object obj)
true
如果作为参数传递给它的对象等于调用此方法的对象,则返回。默认情况下,这意味着两个对象存储在同一内存地址中。public int hashCode()
返回调用此方法的对象的哈希码值。哈希码在应用程序的一次执行期间不得更改,但在两次执行之间可能会更改。
笔记
如果重写,通常需要重写该
hashCode()
方法equals()
,因为约定是它必须为相等的hashCode()
对象产生相同的结果。有关详细信息,请参阅Object 类的 API 规范。
为类生成 equals() 和 hashCode()
笔记
equals()
如果类中已存在和方法的覆盖hashCode()
,系统将提示您是否要在生成新方法之前删除它们。
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));
}
生成 getter 和 setter
IntelliJ IDEA 可以为类中的字段生成访问器和修改器方法(getters和setters )。根据 JavaBeans API 的要求,生成的方法只有一个参数。
getter 和 setter 方法名称由 IntelliJ IDEA 根据您的代码生成命名首选项生成。
在“代码”菜单上,单击“生成” 。AltInsert
在“生成”弹出窗口中,单击以下选项之一:
Getter生成用于获取类字段的当前值的访问器方法。
Setter生成用于设置类字段值的变元方法。
Getter 和 Setter用于生成访问器和修改器方法。
选择要为其生成 getter 或 setter 的字段,然后单击“确定”。
您可以通过单击并访问“Getter/Setter 模板”对话框来添加自定义 getter 或 setter 方法。如果某个字段不在列表中,则已经为其定义了相应的 getter 和 setter 方法。
以下代码片段显示了为具有一个字段的类生成 getter 和 setter 方法的结果var
:
public class MyClass {
int field;
public int getField() {
return field;
}
public void setField(int field) {
this.field = field;
}
}
PHP 注释
警告
以下仅在安装并启用PHP插件时有效。
在PHP上下文中,getter 和 setter 是使用PHP Getter/Setter/Fluent setter文件模板生成的。默认情况下,如这些模板中指定的,setter 是使用set
前缀生成的,getter 是根据推断的属性类型使用is
或前缀生成的 -或。前缀是默认 getter 模板中变量的值。模板在文件和代码模板的代码选项卡中配置。get
boolean
non-boolean
${GET_OR_IS}
生成 toString()
toString()
Java 超类的方法返回java.lang.Object
对象的字符串表示形式。此方法可用于将任何对象打印到标准输出,例如,快速监视代码的执行情况。默认情况下,toString()
返回类的名称,后跟对象的哈希码。例如,您可以覆盖它以返回对象字段的值,这可以为您的需求提供更多信息。
重写类的 toString() 方法
在“代码”菜单上,单击“生成” 。AltInsert
在生成弹出窗口中,单击toString()。
配置以下内容:
toString()
从模板列表中选择用于生成方法的模板。选择要在生成的
toString()
方法中返回的字段。默认情况下,选择所有可用字段。单击“无选择”可生成toString()
仅返回类名的方法。如有必要,请选中插入@Override复选框。
单击“设置”按钮打开“toString() 生成设置”对话框。您可以在其中调整行为并添加自定义模板。
单击“确定”。
如果该toString()
方法已在类中定义,默认情况下,系统会提示您是否要删除该方法,然后再继续。您可以使用toString() 生成设置对话框中的“当方法已存在”选项组来更改此行为:自动替换现有方法或生成重复方法。
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()
:
自定义代码生成模板
用于生成 getter 和 setter 以及equals()
、hashCode()
和toString()
方法的模板是用Velocity 模板语言编写的。尽管您无法修改预定义模板,但您可以添加自己的自定义模板来实现必要的行为。
IntelliJ IDEA 为 Velocity 模板提供以下变量:
模板中可以使用以下变量来生成 getter 和 setter:
多变的 | 描述 |
---|---|
| Java 运行时环境 (JRE) 的当前版本。 |
| 当前班级。 |
| 提供对各种代码生成帮助器方法的访问。 |
| 提供根据当前代码样式格式化名称的能力。 |
| 为其生成 getter 或 setter 的字段。 |
可以在模板中使用以下变量来生成toString()
方法:
多变的 | 描述 |
---|---|
| Java 运行时环境 (JRE) 的当前版本。 |
| 当前班级。 |
| 提供对各种代码生成帮助器方法的访问。 |
| 提供根据当前代码样式格式化名称的能力。 |
| 当前类中的字段列表。 |
可以在模板中使用以下变量来生成equals()
方法:
多变的 | 描述 |
---|---|
| Java 运行时环境 (JRE) 的当前版本。 |
| 当前班级。 |
| 提供对各种代码生成帮助器方法的访问。 |
| 提供根据当前代码样式格式化名称的能力。 |
| 当前类中的字段列表。 |
| 调用该方法的对象的预定义名称 |
| 方法参数的预定义名称 |
|
|
| 选项从向导传递。 |
| 超类是否已 |
可以在模板中使用以下变量来生成hashCode()
方法:
多变的 | 描述 |
---|---|
| Java 运行时环境 (JRE) 的当前版本。 |
| 当前班级。 |
| 提供对各种代码生成帮助器方法的访问。 |
| 提供根据当前代码样式格式化名称的能力。 |
| 当前类中的字段列表。 |
| 超类是否已 |
笔记
生产力技巧
使用代码补全
根据当前上下文,IntelliJ IDEA 可以建议在代码完成弹出窗口中生成相关的代码构造。例如,当插入符号位于 Java 类内部时,完成弹出窗口将包含添加 getter、setter、equals()
、hashCode()
和toString()
方法的建议。
感谢您的反馈意见!