2011-01-13 21 views
14

很多時候我看到有人明確地呼籲super()在沒有明確擴展任何東西的類中。在不擴展任何東西的類中調用super()是不好的做法嗎?

public class Foo 
{ 
    public Foo() 
    { 
    super(); 

    //do other constructor stuff 
    } 
} 

現在我知道,這是完全合法的,如果省略通話是由編譯器添加,但我仍然認爲它是不好的做法。每當我看到這個時候,我都會懷疑程序員是否對繼承存在誤解,以及所有類都隱含地擴展了Object

我是否應該將此添加到我們的編碼標準/最佳實踐中,並且當我看到他們這樣做時,是否應該拉起我團隊中的其他開發人員?它是我個人的錯誤,但我不知道我是不是很挑剔。

回答

17

雖然我是一個一致的人,但我也反對微觀管理每一個風格。擁有大量編碼慣例,特別是當其中一些似乎是武斷的時候,是阻止人們遵守它們的一部分。我認爲編碼準則應該簡化爲提高能力的最有價值的實踐。通過強制這種做法,可讀性,可維護性,性能等有多大提高?

雖然我個人的做法是不打電話super()在這種情況下,它不是很嚴重,我將它包含在編碼規則或調用它的缺陷在審查其他程序員的代碼。然而,我仍然會提及它,並在代碼評論中討論它(而不是像缺陷一樣,只是一個風格問題),試圖遊說更多的工程師使用這個調用來使用而不是

6

隱含被調用所以沒有需要做的是不需要始終是一個不好的做法,這

+4

等待downvoter的評論 – 2011-01-13 11:07:57

+3

我不是問我是否需要調用它,我問是否是不好的做法。 – Qwerky 2011-01-13 11:08:28

+1

+1 - 不知道誰低估了你,但我認爲你的回答是正確的。 – 2011-01-13 11:08:40

8

添加代碼。它會使代碼更不可讀,因爲您需要停下來並開始想知道爲什麼添加這行代碼,以及它是否真的出於某種原因。

3

它需要指出的是,認爲:

  • 調用super()是完全沒有意義的,不管類繼承任何東西,或沒有;這是有意義的只有如果你不調用基類的隱式構造函數
  • 問題應該是「是否正在做一些完全沒有意義的不好的練習?。答案很明顯 - 是的!
1

默認情況下,自動代碼生成器通常會添加顯式超級構造函數調用,所以它並不總是關於程序員的壞習慣。或者,也許是一種糟糕的做法,無視愚蠢生成的代碼。

Eclipse特別生成這個超級調用(從超類生成構造函數),但是,我沒有太多其他IDE的經驗。 (在評論中寫下你的體驗。)另一個'最喜歡的'默認生成的代碼是接口的方法聲明:'public abstract',它是完全多餘的。

0

super()調用由JDeveloper隱式添加。 在寫一個你自己的類時,沒有必要和有用的做這件事。

相關問題