将最终参数传递给另一个方法而无需最终参数声明

我正在阅读有关final变量的信息,并了解到当您将参数作为final时,就无法更改它。但是后来我尝试了一些

编译器在这里抱怨说您无法更改我可以理解的最终参数

public class FinalVariableTest {

    public void method1(final FinalVariableTest object){
        object = new FinalVariableTest(); //Not allowed, compiler complains
    }

    public void method2(FinalVariableTest object){
        object = new FinalVariableTest();
    }

    public static void main(String[] args) {
        FinalVariableTest test = new FinalVariableTest();
        test.method1(test);
    }
}

但是编译器对此很好

public class FinalVariableTest {

    public void method1(final FinalVariableTest object){
        method2(object);
    }

    public void method2(FinalVariableTest object){
        object = new FinalVariableTest(); //Compiler does not complain
    }

    public static void main(String[] args) {
        FinalVariableTest test = new FinalVariableTest();
        test.method1(test);
    }
}

这背后的原因是什么?

吉里·图塞克(Jiri Tousek)

关键字final意味着您不能将变量中包含引用更改为另一个对象(撇开原始类型),而不是不能更改引用对象本身。

在您的示例中,您无法更改objectinmethod1()指向的变量,但实际上可以更改objectinmethod2()指向变量,因为那个不是final而整个过程中,你可以自由地改变对象被引用/指向,除非对象本身具有保护反对。

final method1.object -- cannot point elsewhere
             \                    method2.object -- not final, can be switched to here --.
              \                  /                                                       |
               \                /                                                        |
           original FinalVariableTest instance                       new FinalVariableTest()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将一个方法作为参数传递给另一个方法

将参数传递给另一个函数

将一个方法作为参数传递给另一个方法,但带有参数

将反射方法作为参数传递给另一个反射方法作为委托

将静态方法作为参数传递给Kotlin中的另一个方法

AngularJS将$ scope方法作为参数传递给另一个$ scope方法

将通用方法作为参数传递给另一个方法

将方法名称作为参数传递给另一个方法

将指针类方法作为参数传递给另一个类方法C ++

将Class作为参数传递给另一个Classes方法

如何将变量参数传递给另一个方法?

将类的方法作为参数传递给C ++中的另一个类

将webmethod参数传递给另一个Web方法

将一个函数的所有参数传递给另一个函数

将一个函数传递给另一个函数的参数

将参数从一个Powershell函数传递给另一个

将一个函数的返回参数值传递给另一个烧瓶

将参数从另一个 powershell 脚本传递给一个 powershell 脚本

PHP 将一个函数作为参数传递给另一个函数

将一个类作为参数传递给另一个类

将一个函数传递给另一个参数未知的函数

将函数参数作为参数传递给python中的另一个函数

此函数如何将参数传递给另一个内部函数参数

使用模板可变参数将多个参数传递给另一个函数

打字稿| 使用参数将类型参数传递给另一个类型

如何将参数传递给作为另一个函数参数的函数

Flutter:如何将不是最终值的值传递给另一个类?

将方法的返回值作为参数传递给同一类中的另一个方法

将方法作为参数传递给另一个方法,该方法本身会将传递的方法传递给std线程