我上了课。
#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,但它只会生成普通的设置器,而不是我想要的自定义设置器。
答案 0 :(得分:2)
如果您使用的是IntelliJ IDEA,则可以为此添加一个新的setter模板。
将光标置于类中,然后转到“代码”->“生成”。在菜单中,选择“设置器”。然后点击此菜单右上方的“ ...”:
然后,您可以使用以下代码添加一个名为“ 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分支即可。