如何为字段编写自定义注释,这将为该字段创建自定义设置器?

时间:2019-04-26 05:24:12

标签: java annotations getter-setter lombok

我上了课。

#attributes: array:16 [▼
    "name" => "Test beneficiary"
    "phone" => "80572*****"
    "coordinates" => SpatialExpression {#521 ▼
      #value: Point {#510 ▼
        #lat: 30.3165
        #lng: 78.0322
      }
    }

现在,我不想为任何int字段分配负值。因此,为此,我必须为所有这些编写设置器(它将为所有字段编写设置器(只会设置正值))。

有什么方法可以减少我的工作量,例如编写custome批注(这将为该字段生成setter,setter必须仅设置正值,而忽略负值)并将该注释应用于所有字段。

在研究“如何在Java中编写自定义批注”时,我发现我们可以为方法(为该字段分配默认值),为方法写字段,但对于“ 自定义字段注释”却一无所获会为该字段创建设置器”。

注意:-我也研究了lombok setter,但它只会生成普通的设置器,而不是我想要的自定义设置器。

1 个答案:

答案 0 :(得分:2)

如果您使用的是IntelliJ IDEA,则可以为此添加一个新的setter模板。

将光标置于类中,然后转到“代码”->“生成”。在菜单中,选择“设置器”。然后点击此菜单右上方的“ ...”:

enter image description here

然后,您可以使用以下代码添加一个名为“ no negatives”的新模板:

#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
  if ($paramName >= 0) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
    $field.name = $paramName;
  } else {
    throw new IllegalArgumentException("$paramName must be positive");
  }
}

请注意,此模板不会检查字段类型是否可以与0进行比较。

我基本上通过添加if语句修改了IntelliJ默认模板:

if ($paramName >= 0) {

和else分支:

  } else {
    throw new IllegalArgumentException("$paramName must be positive");
  }

如果您只想在参数为负数时不设置该字段,则不要抛出异常,而只需删除else分支即可。