鉴于我有一个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;
}
答案 0 :(得分:9)
免责声明:您想要的getter / setter类型违反了命名约定,最佳做法和specifications(请参阅第40页的第7节)。许多库(例如用于序列化或编组的库)需要getFoo
和setFoo
类型的getter和setter,如果您使用所需的getter和setter类型,那些库将无法按预期工作产生
话虽如此,可以在IntelliJ中更改默认的getter / setter生成。
如您所知,您可以从IntelliJ菜单栏中选择代码 | 生成,或使用 Alt + Ins 调出Generate窗口的快捷方式。从那里,您可以选择Getter,Setter或Getter和Setter。当您选择其中一个选项时,将打开一个对话框以选择模板以及为其生成getter / setter的字段。
如果您选择模板下拉列表旁边的 ... ,它将打开一个单独的模板管理对话框。
我建议使用复制图标或 Ctrl + D 快捷方式复制IntelliJ默认模板,并为新模板指定一个不同的名称,例如& #39;仅限变量名称'。
然后,您可以修改模板以满足您的需求。
这是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;
}