您好
方法/构造函数参数的最终修饰符有什么用?
例如:
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
}
}
答案 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变量是常量。
另一个好处是防止变量重用。也就是说“一些”只能用于一个目的。