2014-02-12 18 views
1

這可能看起來像一個奇怪的問題,但是有沒有關於如何在構造函數中對參數進行排序的約定,特別是在子類中爲構造函數「增益」添加參數的位置?在我看來,應該有一個,之後我發現自己讀這樣的代碼(代碼就是Groovy,但是這不是真的relvent的問題):在構造函數中是否有參數順序的約定,特別是對於子類?

class Matter { 
    double volume 
    double mass 

    Matter (double m, double v) { 
     mass = m; volume = v; 
    } 
} 

class Food extends Matter { 
    double nutrition 

    Food (double m, double v, double n) { 
     super (m,v); nutrition = n; 
    } 
} 

class Apple extends Food { 
    double sweetness 

    Apple (double s, double m, double v, double n) { 
     super (m,v,n); sweetness = s; 
    } 

} 

class GreenApple extends Apple { 
    double acidity 

    GreenApple (double a, double m, double n, double s, double v) { 
     super (s,m,v,n); acidity = a; 
    } 
} 

正如我在前面已經說明,一旦我們到達在GreenApple中,任何可能曾經在構造函數參數中出現的順序都沒有了。然而請注意,程序員沒有隨機添加他們的新論點--Food的作者認爲應該在後面添加新的論點,蘋果的作者認爲他們應該加在前面,而GreenApple的程序員認爲參數應按字母順序排序,但在一起時,它們使構造函數相當混亂(並且類型安全性在這裏沒有用處,這些都是雙打)。

巧合(呃,不是真的),這些也是我雖然可能會有的三個公約。所以,現在我的問題是,是否有這樣一個約定,如果有,那是什麼?它在語言之間有所不同嗎?

回答

0

據我所知,沒有任何「硬」約定像按字母順序排序參數或類似的東西。恕我直言參數在構造函數或任何函數中應該從最重要到最不重要的排序。當然這有待解釋,但這不是問題,團隊成員之間的良好溝通不能解決問題。

的確,在大多數情況下,我希望子類不需要重新排序構造函數參數,如果它們仍然需要從外部傳遞。但可能有非常有道理的例外。

相關問題