【问题标题】:What does it mean to have a final input parameter in method signature?在方法签名中有一个最终输入参数是什么意思?
【发布时间】:2011-06-28 10:15:05
【问题描述】:

执行以下操作的原因是什么:

public void processSomething(final String hello, final String two, final Car car){}

相对于:

public void processSomething(String hello, String two, Car car){}

【问题讨论】:

    标签: java methods input final


    【解决方案1】:

    这意味着你不能改变引用,但它不能阻止对象被改变。

    【讨论】:

      【解决方案2】:

      表示在方法内,不能给参数赋值。

      想要这样做的一个常见原因是能够使用anonymous inner classes 中的参数,这些参数只能引用final 局部变量,包括参数。

      这样做的另一个原因是,如果您的编码风格倾向于尽可能将 all 局部变量声明为 final。 (就我个人而言,我尝试将它们处理作为最终结果,但实际上避免以这种方式声明它们,因为这会增加麻烦。)

      【讨论】:

      • 让我感到困惑的是:我认为有时可以更改决赛。 IE,您将变量声明为 final 以便按钮侦听器可以使用它。在运行时,激活该按钮侦听器。然后更改变量。然后激活那个按钮监听器。它第二次没有不同的值吗?如果是这样,为什么?如果不是......好吧,我想它真的是不可变的,一旦你告诉我,我就不会感到困惑了。
      • @ArtOfWarfare:如果您已将变量声明为 final,您不能更改它。如果你认为你可以,你应该写一个单独的问题来证明这一点。
      【解决方案3】:

      这意味着您不能更改引用。 String 是不可变的,但如果 Car 是可变的,则可以更改该 Car 中的字段,但不能将其更改为另一个 Car。

      【讨论】:

      • +1 指出String 是API 不可变的,但如果Car 不是不可变的,那么如果不是没有final 访问修饰符,那么里面的字段可能会被更改!
      • 即使引用是最终的,您也可以更改字段。这就是它与 C++ 中的const 不同的地方。
      【解决方案4】:

      表示这个Object的引用不能在方法内改变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        相关资源
        最近更新 更多