java - 如何为将为该字段创建自定义设置器的字段编写自定义注释?
问题描述
我有以下课程。
public class X {
private int a1;
private int a2;
private int a3;
private int a4;
.
.
.
private int a100;
// name of fields are different in actual class(but there are sure 100 fields)
}
现在我不想为任何 int 字段分配负值。所以为了做到这一点,我必须为所有这些编写setter(它会为所有字段编写setter(它只会设置正值))。
那么有没有办法可以减少我的工作量,比如编写客户注释(它将为该字段生成设置器,设置器必须只设置正值并忽略负值)并将该注释应用于所有字段。
在查看“如何在 java 中编写自定义注释”时,我发现我们可以为字段(为该字段分配默认值)、方法编写注释,但是对于将为该字段创建 setter 的“自定义注释”一无所获领域”。
注意:-我也研究了lombok setter,但它只生成普通的 setter,而不是我想要的自定义 setter。
解决方案
如果你使用 IntelliJ IDEA,你可以为此添加一个新的 setter 模板。
将光标放在您的班级中,然后转到代码 -> 生成。在菜单中,选择“二传手”。然后点击此菜单右上角的“...”:
然后,您可以使用以下代码添加一个名为“nonegatives”的新模板:
#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分支即可。
推荐阅读
- javascript - Date().getTime() JavaScript 转换为 php?
- c++ - 如何在我从 C++ 文件中读取行后立即删除行
- indexing - BWA 无法定位索引基因组
- postgresql - 如何将多个值传递到模板中以运行查询
- c - 在 C 中读取文件时出现分段错误
- azure-sql-database - 下载 bacpac 文件失败
- spring - javax.servlet.ServletException:过滤器执行在spring boot中引发了异常
- javascript - 在浏览器控制台中从 document.cookie 访问第三方 cookie 是绝对不可能的吗?
- go - 将字符串连接到结构切片
- node.js - Angular 6 和 NodeJS - 如何清理缓存?