【发布时间】:2017-06-21 09:29:28
【问题描述】:
我目前在一个项目中使用 Java 的自定义注释。我想强制使用我的注释的用户,如果他用@Foo 注释了方法,他必须在方法参数列表中至少声明一个final boolean b。所以它应该看起来像这样:
@Foo
public void foo(final boolean b) { }
@Foo
public void bar() { } // This should result in an error
使用我的注释处理器,我可以检索变量的类型但不能检索最终修饰符。如果我想检索一组修饰符,如下面的代码所示,尽管参数上存在最终修饰符,但该组始终为空。
for (VariableElement parameter : method.getParameters()) {
Set<Modifier> modifiers = parameter.getModifiers(); // This set is always empty
}
任何想法,为什么会这样?
【问题讨论】:
-
如果您查看反编译的类,您会看到编译器从所有最终参数中删除了
final关键字。这是合理的,因为final仅在编译时才有意义。 -
感谢@AndrewTobilko 的快速回复。我现在可以看到问题了。所以你说用我的方法我将无法实现这个?我需要以某种方式强制用户将此方法参数设为
final,这样他就无法在方法主体内重新分配变量值。
标签: java annotations annotation-processing