簡體   English   中英

方法參數應該在Java8中作為final

[英]Should method parameters be made as final in Java8

在java8中,如果我們不再分配它們,變量實際上是最終的。 因此,這意味着如果我們聲明一個方法,並且如果我們不聲明它的參數是最終的,那么如果我們不在方法定義中分配它們,它們實際上是最終的。 那么,使參數最終在java8中有什么不同嗎?

IMO,標記最終參數的原因是為了表明你依賴它是最終的。 如果您在lambda表達式或內部類中使用參數,則可能就是這種情況。 標記參數final告訴下一個程序員(或者從現在開始一年),有代碼依賴於該參數是最終的。

不,除非你在匿名函數或lambda表達式中使用它,否則它不是最終的。 不是正常的方法,為什么要這樣。

我以與你相同的方式使用final。 對我來說,局部變量和方法參數看起來多余,而且它沒有傳達有用的額外信息。

一個重要的事情是努力保持我的方法簡潔,每個人都做一個單一的任務。 因此,我的局部變量和參數的范圍非常有限,僅用於單一目的。 這最大限度地減少了無意中重新分配它們的可能性。

而且,正如您所知,final並不能保證您不能更改(非原始)變量的值/狀態。 只有在初始化后才能重新分配對該引用的引用。 換句話說,它只能與原始類型或不可變類型的變量無縫地協同工作。 考慮

final String s = "forever";
    final int i = 1;
    final Map<String, Integer> m = new HashMap<String, Integer>();

    s = "never"; // compilation error!
    i++; // compilation error!
    m.put(s, i); // fine

這意味着在許多情況下它仍然不會讓人更容易理解代碼中發生的事情,而誤解這可能實際上會導致難以察覺的細微錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM