1

这似乎是一个奇怪的问题,但是关于如何在构造函数中排序参数,特别是在子类中添加构造函数“获得”的参数的位置是否有约定?在我发现自己阅读了这样的代码之后,在我看来应该有一个(代码是 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,任何可能曾经存在于构造函数参数中的顺序都将消失。但是请注意,程序员并没有随机添加他们的新参数——Food 的作者认为应该在后面添加新参数,Apple 的作者认为应该在前面添加它们,GreenApple 的程序员认为参数应该按字母顺序排序,但是它们一起使构造函数变得相当混乱(并且类型安全在这里没有用,这些都是双精度的)。

巧合的是(嗯,不是真的),这也是我可能存在的三个约定。所以,我现在的问题是,是否有这样的约定,如果有,它是什么?语言之间有区别吗?

4

1 回答 1

0

据我所知,没有任何“硬”约定,例如按字母顺序对参数进行排序或类似的东西。恕我直言,构造函数或任何函数中的参数应该从最重要到最不重要进行排序。当然,这需要解释,但这不是团队成员之间良好沟通无法解决的问题。

事实上,在大多数情况下,如果子类仍然需要从外部传递,我希望子类不会重新排序构造函数参数。但是可能有非常正当的理由可以例外。

于 2014-02-12T21:11:38.517 回答