【发布时间】:2015-07-28 03:21:24
【问题描述】:
我最近一直在使用 Lombok ——我想知道是否可以提供一个类级别或方法级别的注释来为所有参数添加 final。例如:
@finalizer
void foo(Bar bar);
变成
void foo(final Bar bar);
【问题讨论】:
-
这是不可能的;或者至少这不会像你认为的那样做。
final是由 语言 而非 JVM 强制执行的关键字。你能做的最好的就是一个注释处理器,它会研究生成的字节码 -
当然不是,这甚至是 Lombok 所做的。但同样
final是该语言的关键字,对生成的字节码没有影响。 -
@DraganBozanovic AFAIK
final参数被简单地丢弃,因为 JVM 不需要它。确保它们不会被重新分配与 JVM 无关。确保闭包中使用的参数是(有效地)final,AFAIK 也是一个编译时特性(因为它的唯一好处是防止程序员自责)。 -
@fge 关于参数,我同意,但
final在任何其他地方都会被 JVM 强制执行和使用。 -
@maaartinus 来源,请...
标签: java annotations lombok