【发布时间】:2017-09-25 11:23:24
【问题描述】:
我正在尝试创建一个使用 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 会希望导入正确的 Optional(而不是 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 注释,但理想情况下它可以与任何已配置的注释一起使用:
【问题讨论】:
-
暗中刺伤:试试
isAnnotationPresent? (而不是getAnnotation)
标签: java templates intellij-idea velocity