java - 我应该将 Java/Android 中的所有参数设置为 final 吗?

标签 java parameters overriding final superclass

this answer它声明你永远不应该改变你分配的参数,如果 Java 强制参数总是最终的,那将是最好的。我个人同意并且从不这样做。如果我想更改参数的某些内容然后再次返回它,我会在方法中创建一个本地副本,更改有关该副本的内容,然后返回该副本。

这让我想知道,我是否应该将我的 Android/Java 项目中的所有参数都设为 final,或者在某些情况下我不想这样做?

我脑子里冒出的一些问题:

  • @Override 方法的参数最终会产生不同吗?
  • 作为上一个问题的后续:如果我调用 super(my_final_parameter); 有关系吗?
  • 再次跟进:使用默认 Java/Android extendssuper(my_final_parameter);,这些 Java/Android 类在幕后是否存在任何情况使用参数,所以我不能让它们成为最终的?

如果上述情况(或您可能想到的其他情况)参数是否为 final 并不重要,那么将方法/构造函数/重写方法的每个参数设为 final 是个好主意吗?

最佳答案

Java is pass-by-value and not pass-by-reference ,修改参数不会对原始变量产生影响。

final 添加到您的参数可以避免任何人必须修改您的代码(包括您)才能在这个“错误”中运行。所以这取决于你,如果你想确保不要试图修改你的参数认为它会修改你的变量,请使用 final

我个人不使用这种做法,因为我知道这种行为(而且我的第一语言是 java)。

至于您弹出的问题,他们在了解上述内容后会自行回答。覆盖方法只是超方法的不同实现,超参数与其运行时行为无关,因为选择了覆盖方法。还调用 super(final_var),因为 java 是按值传递的,只需将值传递给父类(super class),而 final_var 保持不变,因此不会违反 final 修饰符。

关于java - 我应该将 Java/Android 中的所有参数设置为 final 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454088/

相关文章:

Java 反射 getDeclaredMethod(...) 返回 Null

java - 使用通过反射获得的枚举常量

Python:不使用 argparse 显示 'choices'

c# - 带参数的 SelectCommand 提供空结果

ruby-on-rails - 如何使用 Ruby on Rails 初始化一个类来设置自定义参数值?

c++ - 从父对象c++访问子方法

java - Hapi-HL7-Terser,使用 terser 创建消息时的分段顺序

java - C++ 中的 NULL 和 Java 中的 null 有什么区别?

ios - 如何使用 Swift 3 覆盖 UIView 中的 requiresConstraintBasedLayout?

Java - 如何在子匿名类中强制重写方法?