如何在生成Getter时忽略注解?
How to ignore annotation when generating Getter?
我创建了一个简单的 Getter 生成器来生成一个 "Optional-Getter",它将字段包装在一个 Optional 中。问题是当字段被注释为@Nullable 时,getter 也将使用@Nullable 生成,我发现每次生成 getter 时简单地删除它非常烦人。如何忽略服装 getter 中的字段注释?
这是我的 "Optional-Getter" 发电机。
#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
is##
#else
get##
#end
${name}() {
return Optional.fromNullable($field.name);
}
这就是我生成 getter -
时的结果
public class Class {
@Nullable
private String someMember;
@Nullable
public Optional<String> getSomeMember() {
return Optional.fromNullable(someMember);
}
}
这是预期的结果 -
public class Class {
@Nullable
private String someMember;
public Optional<String> getSomeMember() {
return Optional.fromNullable(someMember);
}
}
通过他们的 GitHub Repository > Releases
.
获取插件 CodeGenerator
最新版本是 1.3.3
安装插件 "from disk",重新启动 IntelliJ/Android Studio,然后通过 Settings > CodeGenerator
,使用此代码修改默认 Getter and Setter
模板,然后 启用它
#foreach($field in $fields)
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field.element, $project))))
#if ($field.boolean && $field.primitive)
#set($getter = "is${name}")
#else
#set($getter = "get${name}")
#end
#set($setter = "set${name}")
#if($field.modifierStatic)
static ##
#end
#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
${getter}() {
return Optional.fromNullable($field.name);
}
#if($field.modifierStatic)
static ##
#end
void ${setter}($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
#end
您可以通过 Alt+ins
(或 Code > Generate
)
使用它
根据需要自定义模板,或添加新模板。享受 ;)
这也是我为 IDEA 寻找的东西。其实从很久以前。不幸的是,到目前为止它似乎还不能参数化。
这是 YouTrack 问题,可以自动插入 @Nullable
和 @NotNull
生成 getters/setters
https://youtrack.jetbrains.net/issue/IDEA-30683
您可以投票选出一项功能,该功能会在可能的情况下自动转换为 Optional<T>
getter
https://youtrack.jetbrains.net/issue/IDEA-201804
并且您可以投票支持向 Apache Velocity 模板公开注释的功能
我创建了一个简单的 Getter 生成器来生成一个 "Optional-Getter",它将字段包装在一个 Optional 中。问题是当字段被注释为@Nullable 时,getter 也将使用@Nullable 生成,我发现每次生成 getter 时简单地删除它非常烦人。如何忽略服装 getter 中的字段注释?
这是我的 "Optional-Getter" 发电机。
#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
is##
#else
get##
#end
${name}() {
return Optional.fromNullable($field.name);
}
这就是我生成 getter -
时的结果public class Class {
@Nullable
private String someMember;
@Nullable
public Optional<String> getSomeMember() {
return Optional.fromNullable(someMember);
}
}
这是预期的结果 -
public class Class {
@Nullable
private String someMember;
public Optional<String> getSomeMember() {
return Optional.fromNullable(someMember);
}
}
通过他们的 GitHub Repository > Releases
.
获取插件 CodeGenerator
最新版本是 1.3.3
安装插件 "from disk",重新启动 IntelliJ/Android Studio,然后通过 Settings > CodeGenerator
,使用此代码修改默认 Getter and Setter
模板,然后 启用它
#foreach($field in $fields)
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field.element, $project))))
#if ($field.boolean && $field.primitive)
#set($getter = "is${name}")
#else
#set($getter = "get${name}")
#end
#set($setter = "set${name}")
#if($field.modifierStatic)
static ##
#end
#if($field.modifierStatic)
static ##
#end
Optional<$field.type> ##
${getter}() {
return Optional.fromNullable($field.name);
}
#if($field.modifierStatic)
static ##
#end
void ${setter}($field.type $paramName) {
#if ($field.name == $paramName)
#if (!$field.modifierStatic)
this.##
#else
$classname.##
#end
#end
$field.name = $paramName;
}
#end
您可以通过 Alt+ins
(或 Code > Generate
)
根据需要自定义模板,或添加新模板。享受 ;)
这也是我为 IDEA 寻找的东西。其实从很久以前。不幸的是,到目前为止它似乎还不能参数化。
这是 YouTrack 问题,可以自动插入 @Nullable
和 @NotNull
生成 getters/setters
https://youtrack.jetbrains.net/issue/IDEA-30683
您可以投票选出一项功能,该功能会在可能的情况下自动转换为 Optional<T>
getter
https://youtrack.jetbrains.net/issue/IDEA-201804
并且您可以投票支持向 Apache Velocity 模板公开注释的功能