【问题标题】:How to create custom IntelliJ getter template for nullable field with JDK8 Optional如何使用 JDK8 为可空字段创建自定义 IntelliJ getter 模板
【发布时间】: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&lt;String&gt; 而不是String

我正在使用 javax.annotation.Nullable 注释,但理想情况下它可以与任何已配置的注释一起使用:

【问题讨论】:

  • 暗中刺伤:试试isAnnotationPresent? (而不是getAnnotation

标签: java templates intellij-idea velocity


【解决方案1】:

我就是这样配置的。我有一个名为 Optional getter 的 getter 模板:

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

我通常使用Lombok 作为吸气剂,这就是为什么我可以一直选择该模板。下面是Generate... -&gt; Getter 上弹出的窗口:

当我选择了这个后,我就可以开始输入 getSomething... 并且会出现一个弹出窗口:

点击回车后插入以下代码:

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多