鉴于我有一个POJO,如下所示:
public class Person {
private String name;
}
如何让 IntelliJ 生成没有前缀 get
和 set
的 getter 和 setter?
要获得此内容:
public String name() {
return this.name;
}
public void name(String name) {
this.name = name;
}
取而代之的是:
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
免责声明:您想要的 getter/setter 类型违背了命名约定、最佳实践和规范(请参阅第 40 页开始的第 7 节(。许多库(例如用于序列化或封送的库(需要getFoo
和setFoo
类型的 getter 和 setter,如果使用要生成的 getter 和 setter 类型,这些库将无法按预期工作。
话虽如此,可以在 IntelliJ 中更改默认的 getter/setter 生成。
如您所知,您可以选择 Code|从 IntelliJ 菜单栏生成,或使用 Alt+Ins 快捷方式调出"生成"窗口。从那里,您可以选择 Getter、Setter 或 Getter and Setter。当您选择其中一个选项时,将打开一个对话框,用于选择模板以及要为其生成 getter/setter 的字段。
如果选择模板下拉列表旁边的"...">,它将打开一个单独的模板管理对话框。
我建议使用复制图标或 Ctrl+D 快捷方式复制 IntelliJ 默认模板,并为新模板指定不同的名称,例如"仅变量名称"。
然后,您可以修改模板以满足您的需求。
以下是 IntelliJ 默认 getter 模板:
public ##
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
#if ($StringUtil.startsWithIgnoreCase($name, 'is'))
#set($name = $StringUtil.decapitalize($name))
#else
is##
#end
#else
get##
#end
${name}() {
return $field.name;
}
您应该能够完全删除布尔检查,因为对于模板,方法名称不依赖于变量的类型。以下模板应为您提供所需的 getter:
public ##
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($name = $StringUtil.decapitalize($name))
##
${name}() {
return $field.name;
}
这应该给你所需的二传手:
#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
static ##
#end
void $StringUtil.decapitalize($StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}