方法/构造函数参数的最终修饰符有什么用处

时间:2010-11-12 14:03:27

标签: java

您好
方法/构造函数参数的最终修饰符有什么用?

例如:

class someClass {
    private final double some; // I understand the use of final in this context, immutability etc..

    public someClass(final double some) {
        // I don't understand what purpose is served by making "some" final
        this.some = some;
    }

    public void someMethod(final double some) {
        // I don't understand what purpose is served by making "some" final
    }
}

3 个答案:

答案 0 :(得分:5)

您需要时有两种主要情况:

1)你想在本地类(通常是匿名类)中使用参数,如:

public void foo(final String str) {
    Printer p = new Printer() {
        public void print() {
            System.out.println(str);
        }
    };
    p.print();
}

2)你喜欢每个未修改的变量用final字标记的样式(保持尽可能多的东西通常是一种很好的做法)。

答案 1 :(得分:3)

好吧,目的是你不能将参数与任何东西一起使用

public someClass(T some) {

        some = null; //You can do this. Maybe you want to use the variable `some` later on in your constructor
    }

public someClass(final T some) {

        some = null; //You can't do this. If you want to reuse `some` you can't.
    }

有用的?不多。通常,您不使用参数变量。但在某些特殊情况下,您可能希望能够做到这一点。

无论如何,如果有些new someClass(mySome)mySome将永远不会被更改,尽管在函数内部为参数赋值。 Java中没有pass-by-refrence这样的东西。变量是基元或对象的引用,而不是对象本身。

答案 2 :(得分:1)

从函数的角度来看,some变量是常量。

另一个好处是防止变量重用。也就是说“一些”只能用于一个目的。