生成Getter时如何忽略注释?
Posted
技术标签:
【中文标题】生成Getter时如何忽略注释?【英文标题】:How to ignore annotation when generating Getter? 【发布时间】:2019-07-11 01:36:00 【问题描述】:我创建了一个简单的 Getter 生成器来生成一个“Optional-Getter”,它将字段包装在 Optional 中。问题是当字段被注释为@Nullable 时,getter 也将使用@Nullable 生成,我发现每次生成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);
【问题讨论】:
【参考方案1】:通过他们的GitHub Repository > Releases
获取插件CodeGenerator。
最新版本是1.3.3
“从磁盘”安装插件,重新启动 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
自动插入到生成的 getter/setter 中可用
https://youtrack.jetbrains.net/issue/IDEA-30683
如果可能,您可以投票支持自动转换为 Optional<T>
getter 的功能
https://youtrack.jetbrains.net/issue/IDEA-201804
您可以投票支持将注释公开给 Apache Velocity 模板的功能
https://youtrack.jetbrains.net/issue/IDEA-176763
【讨论】:
所以他们添加了这个自动注释生成作为一项功能,但没有提供取消/修改它的选项? @OfekRegev 完全正确。但他们站在“好的一面”。可能他们没有考虑您的用例。请记住,Optional 是一个相对较新的标准功能。 我认为他们实际上是在寻找简单的解决方案,当然这并不是在 Apache Velocity 模板中添加注释...... @OfekRegev 如果您对插件开发感兴趣,您也许可以创建自己的 getter 和 setter 生成器。 我对开发很多东西很感兴趣,可惜一天只有24小时......以上是关于生成Getter时如何忽略注释?的主要内容,如果未能解决你的问题,请参考以下文章
将 XML 文件读入 XmlDocument 时如何忽略注释? [复制]
IDE 不显示 Lombok 为 Jackson 注释类生成的 getter 和 setter