如何使用JDK8为可为空的字段创建自定义IntelliJ getter模板可选

时间:2017-09-25 11:23:25

标签: java templates intellij-idea velocity

我正在尝试创建一个使用JDK8 Optional的自定义IntelliJ模板。如果字段用@Nullable注释,我想使用Optional作为getter。

而不是这个(使用默认的getter模板):

@Nullable
private final String name;

public String getName() {
    return name;
}

我想要这个:

@Nullable
private final String name;

public java.util.Optional<String> getName() {
    return java.util.Optional.ofNullable(name);
}

我保留了完整的软件包名称,因为IDE希望导入正确的可选项(而不是Guava)。

这是我到目前为止的事情:

#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
  is##
#else
  get##
#end
${name}() {
  #if ($field.getAnnotation(javax.annotation.Nullable.class))
    return Optional.ofNullable($field.name);
  #else  
    return $field.name;
  #end  
}

getAnnotation(javax.annotation.Nullable.class)似乎不起作用。还缺少使用Optional<String>而不是String

我正在使用javax.annotation.Nullable注释,但理想情况下它适用于任何已配置的注释:

enter image description here

1 个答案:

答案 0 :(得分:0)

IntelliJ IDEA(至少在2020.2.3版中)具有用于生成此类可选getter的内置功能。只需开始输入getSomething ...,您就会弹出一个窗口:

enter image description here

按Enter键后,您将得到以下代码:

enter image description here