簡體   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