什么是最好的构造函数?

7
考虑我们有两个类LinePoint,其中类Line如下使用类Point:
public class Point {
   private int x;
   private int y;

   public Point(int x, int y) {
      this.x = x;
      this.y = y;
   }
}

并且

public Class Line
{
   private Point start;
   private Point end;
   ...
}

基于面向对象编程原则,我在思考以下哪种构造函数对于Line类更好?

public Line(Point start, Point end)
{
   this.start = start;
   this.end = end;
}

或者

public Line(int startX, int startY, int endX, int endY)
{
   start = new Point(startX, startY);
   end = new Point(endX, endY);
}

请注意,有一个单独的网站专门提供代码审查服务:http://codereview.stackexchange.com/ - Duncan Jones
3个回答

10

毫无疑问是第一个,它更高级,意图更清晰,更简洁,并且在 Point 类发生变化时更易于维护。


大多数情况下,您也会提供第二个。 - Larry
@Larry - 一旦你提供第二个,在加上第一个的基础上,你就无效了我最后一点,这在面向对象编程的视角来看可能是最重要的。想象一下如果你想将这个扩展到三维坐标点会发生什么。 - jonvuri
1
从纯主义的角度来看,这是正确的。然而,如果你最终要打一百次 new Line(new Point(x1,y1), new Point(x2,y2)),提供第二个方法作为便捷方法(或者使用一个工厂方法)就更有意义了。 - Heiko Schmitz
针对参数列表过长的问题,我们可以使用param[]。我同意Kiyura的观点,第一个更符合面向对象的编程思想。 - Larry

2

我认为创建Points实例并将其传递给构造函数会比让构造函数多做一点工作更好。

所以,你应该选择第一个方法。这样,构造函数只需要用传递过来的实例初始化引用,而不需要自己创建实例。


0

你可以使用它们两个,但如果你需要一个组合关联,只能用第二个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接