繁体   English   中英

最终变量作为方法参数

[英]Final variables as method arguments

我正在查看同事的一些代码并看到以下方法:

public void someMethod(final String str) {
    ...
}

我觉得很奇怪,因为弦乐是不可改变的。 我认为删除final关键字是安全的。

我还发现了以下内容

public void reportProblems(final Collection<IProblem> problems) {
    ...
}

周围没有任何内部类,所以..在那里使用final关键字是否有意义? 在我看来,在决赛中有完全相同的没有。 我对吗?

谢谢

字符串的不变性与它是否被宣告为final 完全无关。 你可以有一个最终的StringBuilder参数,它会阻止完全相同的事情:在方法中重新分配变量。 你仍然可以追加到StringBuilder Java中的final与C ++中的const

有些人喜欢在可能的情况下将所有内容都设为最终 - 如果您知道变量的值不会改变,则可以更容易地对其进行推理。 我对这种观点有很多的同情,并且经常采用相同的方法 - 除了我实际上并没有用final修饰符强制解决这个问题,只是因为它增加了代码中的瑕疵。 如果final是默认值并且您必须明确使用mutable修饰符,我怀疑大多数开发人员不会开始使每个局部变量都可变......他们只是在大多数情况下使用默认值,就像现在一样。

所以,回到最初的问题:我怀疑开发人员只想明确他们的风格。 这不是我怎么做的,但我能理解动机。 另一种可能性是,在一个点一个内部类,但现在走了,开发人员忘了删除的final修改。

当然,如果你的同事写了代码,你不必猜测 - 只要问!

在我看来,在决赛中有完全相同的没有。 我对吗?

你错了,因为它并不完全一样。

像下面的代码将编译而没有最终 ...

public void someMethod(String str) {
    str = "nonsense"; // will compile fine
}

...如果有最终结果,将无法编译

public void someMethod(final String str) {
    str = "nonsense"; // won't compile
}

“一个词有多么不同”

它会阻止您在方法体内分配参数变量。 所以它确实有所作为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM