我正在尝试创建一个使用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
注释,但理想情况下它适用于任何已配置的注释: