这可能看起来像一个奇怪的问题,但是有没有关于如何在构造函数中对参数进行排序的约定,尤其是在子类中添加构造函数“获得”的参数?在我发现自己正在阅读这样的代码之后,在我看来应该有一个(代码是Groovy,但这并不是真正的问题):
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,任何曾经存在于构造函数参数中的订单都消失了。但请注意,程序员并没有随意添加新的参数 - 食品的作者认为应该在后面添加新的论点,Apple的作者认为应该在前面添加它们,而GreenApple的程序员则认为参数应该按字母顺序排序,但是它们一起使得构造函数相当混乱(类型安全在这里没有用,这些都是双倍的。)
巧合(嗯,不是真的),这些也是我可能会有的三个惯例。那么,我现在的问题是,是否存在这样的约定,如果存在,它是什么?语言之间有区别吗?
答案 0 :(得分:0)
据我所知,没有任何"硬"像按字母顺序排序参数或类似的约定。在构造函数中或在任何函数中的IMHO参数应该从最重要到最不重要的排序。当然,这需要解释,但这不是一个问题,团队成员之间的良好沟通无法解决。
实际上,在大多数情况下,如果仍然需要从外部传递,我希望子类不重新排序构造函数参数。但是可以有非常有效的理由来制作例外。