java - Java的final关键字在大多数情况下真的需要吗?

标签 java jvm

我发现一些 Java IDE 具有这样的规则:无需询问用户即可将事情最终确定。例如,只需打开一个缺少任何“final”关键字的文件,IDE 就会在各处插入一堆关键字,尤其是在变量上。

我的论点一直是:“如果 IDE 可以通过算法实现,那么 JVM 也可以”

这个论点站得住脚吗? Java 开发人员什么时候应该使用“final”关键字?每个可能是final 的变量都应该这样声明吗?

谢谢!

最佳答案

My argument has always been: "If the IDE can do it algorithmically, so can the JVM"

Does this argument hold water?

不。因为当 IDE 执行此操作时(我还没有看到任何默认在没有询问的情况下执行此操作,即使您可以显式配置它以这种方式执行操作),开发人员可以检查这是否确实是决定他们想。这防止其他代码做违背开发人员意愿的事情。

如果在执行时完成,那就无法达到整个目的。如果我创建一个字段 final 来防止其他代码修改它,那么当其他代码尝试修改它时,我希望出现编译时错误。如果它只是由 JVM 决定,我就不能依赖代码修改它。

When should Java developers be using the 'final' keyword?

对于字段,当字段要在构造函数中初始化并且此后不会更改时。

对于类,当您尚未将类设计为子类时(IMO)。

对于方法,当您没有为子类设计代码来重写该方法时。

对于局部变量,您想要访问匿名内部类中的变量。 (当然,您也可以将它们用于其他局部变量 - 我不倾向于这样做,但我知道有些人这样做。当然,这种差异对于方法之外的代码来说是不可见的。)

关于java - Java的final关键字在大多数情况下真的需要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616948/

相关文章:

java - 如何启动 Play 应用程序的两个实例?

java - String.split() 不工作

java - JTree 节点的可变工具提示

kotlin - 错误: Kotlin :[内部错误] java.rmi.UnmarshalException

java - 通过 http 寻找 api/协议(protocol)

java - 如何从Eclipse运行Javac

java - 如何在 Android 源代码树中启用 IPC

Java - 在 EventListener 中创建线程

java - 在 64 位 JVM 上运行的 Eclipse 32 位

java - 支持在 HotSpot JVM 中删除压缩字符串?