如何从 IntelliJ getter/setter 代中删除 `get` 和 `set`
How to remove the `get` and `set` from IntelliJ getter/setter generation
假设我有一个像这样的 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 类型违反命名约定、最佳实践和 specifications(请参阅第 7 节,从第 40 页开始)。许多库,例如那些用于序列化或编组的库,需要 getFoo
和 setFoo
类型 getters 和 setters,如果您使用这些库将不会按预期工作您要生成的 getter 和 setter 的类型。
也就是说,可以更改 IntelliJ 中的默认 getter/setter 生成。
如您所知,您可以从 IntelliJ 菜单栏 select Code|Generate,或使用 Alt+Ins 快捷方式调出生成 window。从那里,您可以 select Getter、Setter 或 Getter 和 Setter。当您 select 这些选项之一时,将打开一个对话框,显示 select 模板以及要为哪些字段生成 getters/setters。
如果您 select 模板下拉列表旁边的 ...,它将打开一个单独的模板管理对话框。
我建议使用复制图标或 Ctrl+D 快捷方式复制 IntelliJ 默认模板,并提供新的模板不同的名称,例如 'Variable Name Only'.
然后,您可以修改模板以满足您的需要。
这是 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;
}
这应该会给你想要的 setter:
#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;
}
假设我有一个像这样的 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 类型违反命名约定、最佳实践和 specifications(请参阅第 7 节,从第 40 页开始)。许多库,例如那些用于序列化或编组的库,需要 getFoo
和 setFoo
类型 getters 和 setters,如果您使用这些库将不会按预期工作您要生成的 getter 和 setter 的类型。
也就是说,可以更改 IntelliJ 中的默认 getter/setter 生成。
如您所知,您可以从 IntelliJ 菜单栏 select Code|Generate,或使用 Alt+Ins 快捷方式调出生成 window。从那里,您可以 select Getter、Setter 或 Getter 和 Setter。当您 select 这些选项之一时,将打开一个对话框,显示 select 模板以及要为哪些字段生成 getters/setters。
如果您 select 模板下拉列表旁边的 ...,它将打开一个单独的模板管理对话框。
我建议使用复制图标或 Ctrl+D 快捷方式复制 IntelliJ 默认模板,并提供新的模板不同的名称,例如 'Variable Name Only'.
然后,您可以修改模板以满足您的需要。
这是 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;
}
这应该会给你想要的 setter:
#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;
}