我正在尝试理解注释的用例。我读过例如Oracle Annotations Tutorial和其他一些资源。一种总是缺少的示例是,如何实际添加注释功能。
假设我希望有一个注释@SetValueIfNull
,当字段,参数或方法等于/返回null
时,它会分配/返回给定的值。
我的注释可能是:
package com.stackoverflow.tests.annotations;
/**
* Replaces null in fields, parameters and methods.
*/
public @interface SetValueIfNull {
/**
* Value used to replace null.
*/
String replacement() default "";
}
这里有一个例子:
package com.stackoverflow.tests.annotations;
public class ReplaceNull {
@SetValueIfNull(replacement = "Peter")
private String name;
public static void main(String[] args) {
ReplaceNull o = new ReplaceNull();
// This should print "Peter"
System.out.println(o.getName());
// This should print "Julie"
o.setName(null);
System.out.println(o.getName());
// This should print "John"
o.setName("John");
System.out.println(o.getName());
// This should print "Margaret"
System.out.println(o.maggy());
}
String getName() {
return this.name;
}
void setName(@SetValueIfNull(replacement = "Julie") String n) {
this.name = n;
}
@SetValueIfNull(replacement = "Margaret")
String maggy() {
return null;
}
}
不时出现的唯一流行语是“使用反射(或编译器插件)”。我想编译器插件不是运行时功能的方法(除了我不知道如何编写编译器插件)。
那么我的示例有一个简单的解决方案,还是我必须为此开发/使用整个框架?