【问题标题】:Making all parameters final with an annotation in Java在 Java 中使用注解使所有参数最终化
【发布时间】: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


【解决方案1】:

这是可能的。 Lombok 可以做到,已经有 FieldDefaults 注释允许默认设置所有字段 final。对参数执行此操作会更容易。虽然 final on fields 是 JVM 处理的事情(通过不允许赋值和在构造函数末尾发出写屏障),但 final on parameters 只是编译时功能。

这是不可能的。 Lombok目前不做,作者opinion是说没意义。

AFAIK 有执行 final 参数的工具。

如果在 Java 中默认情况下所有内容都是 final 并且可以使用 var 之类的东西覆盖,我个人会非常高兴。但是这个想法来得太晚了 20 年。

【讨论】:

  • 我同意 100% 关于 final 应该是默认值。
猜你喜欢
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2014-08-18
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多