gpt4 book ai didi

java - 如何从 IntelliJ getter/setter 生成中删除 `get` 和 `set`

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:40 27 4
gpt4 key购买 nike

鉴于我有一个像这样的 POJO:

public class Person {
private String name;
}

如何让 IntelliJ 生成不带前缀 getset 的 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 (见第 40 页开始的第 7 节)。许多库,例如那些用于序列化或编码的库,都需要 getFoosetFoo 类型的 getter 和 setter,如果您使用 getter 类型,这些库将无法按预期工作和你想要生成的 setter 。

也就是说,可以更改 IntelliJ 中的默认 getter/setter 生成。

您可能知道,您可以从 IntelliJ 菜单栏中选择 Code|Generate,或者使用 Alt+Ins 调出生成窗口的快捷方式。从那里,您可以选择 Getter、Setter 或 Getter 和 Setter。当您选择其中一个选项时,将打开一个对话框以选择模板以及要为其生成 getter/setter 的字段。

如果您选择模板下拉列表旁边的 ...,它将打开一个单独的模板管理对话框。

我建议使用复制图标或 Ctrl+D 快捷方式复制 IntelliJ Default 模板,并为您的新模板指定一个不同的名称,例如 '仅变量名称”。

然后,您可以修改模板以满足您的需要。

这是 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;
}

您应该能够完全删除 boolean 检查,因为对于您的模板,方法名称将不依赖于变量的类型。以下模板应为您提供所需的 setter/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;
}

关于java - 如何从 IntelliJ getter/setter 生成中删除 `get` 和 `set`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177894/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com