這種比較方法:不應分配參數'foo' - 有什麼危害?
void doStuff(String val) {
if (val == null) {
val = DEFAULT_VALUE;
}
// lots of complex processing on val
}
...這種方法:
void doStuff(String origVal) {
String val = origVal;
if (val == null) {
val = DEFAULT_VALUE;
}
// lots of complex processing on val
}
對於前一種方法時,Eclipse發出警告 「參數 'VAL' 不應該被分配」。爲什麼?
在我看來,前者更清潔。首先,它不會迫使我想出兩個好名字val
(想出一個好的足夠硬)。
(注:假設沒有在封閉類命名爲val
場)
downvote?誰知道? ;-)你不喜歡什麼? – andersoj 2010-10-20 20:04:10
我不明白什麼最終和輸出參數必須做對方。最後的參數仍然是可變的,可以用作輸出參數。另一方面,最終禁止將新對象分配給參數,並確保有對原始對象的引用,因此可用於輸出。我認爲final並不強調參數不是輸出參數。事實上,情況恰恰相反。我錯了嗎? – 2012-11-27 13:30:06
@SebastianG如果參數是一個基元,那麼'final'就會阻止分配一個新的值(因此將它與inout混淆)。如果參數是一個參考,那麼'final'將阻止重新分配它。因此參數本身不是一個inout(java通過值傳遞引用 - http://stackoverflow.com/questions/40480/is-java-pass-by-reference)但當然你可以改變傳入和使用的任何對象輸出的副作用。 'final'關鍵字對此沒有影響。 – andersoj 2012-11-27 14:45:47