我应该使用Point.x还是Point.getX()?

时间:2015-05-13 15:59:37

标签: java point getter

我有Point。我想将x作为int。如果我使用Point.x,我会x作为int。但我觉得我应该尽可能使用吸气剂(Why use getters and setters?)。 Point.getX()的问题是它返回一个double而不是int。

哪个更好,还是只是偏好?

ab

Point point = new Point(5, 5);
int a = point.x;
int b = (int) point.getX();

我已阅读Java Point, difference between getX() and point.x,但它并没有真正回答我的问题。或者至少我不明白答案。

4 个答案:

答案 0 :(得分:3)

getX()类的getY()Point函数返回一个double,因为它是其父类(Point2D)所需要的。这是因为它的所有子类(Point2D.DoublePoint2D.Float)都可以在同一个地方工作。

直接使用point.xpoint.y而不是使用getter函数在这种情况下可能没问题,因为Point类是一个奇怪的角落案例,没有人似乎喜欢 - 大多数人认为它应该是不可改变的,或至少更好地隐藏其价值。

如果你害怕代码审查之类的东西,只需在那里发表评论,解释为什么你直接访问x和y变量。

tl;博士:这只是个人偏好。

答案 1 :(得分:1)

我认为,简而言之,这个类的设计者不想创建另外两个函数getXAsInteger和getYAsInteger,但仍然可以选择获取基础整数值,而不是转换为double的值。所以在这种情况下做一个例外并直接使用这些字段。

答案 2 :(得分:1)

由于点类的getter方法的double返回类型只是为了使它通过继承兼容而且getX()不做任何事情而不返回值。

所以,我想,这只是你的偏好 但就像在这种情况下使用point.x(为什么进行不必要的转换?),虽然我更喜欢总是使用getter / setter。

答案 3 :(得分:0)

正如其他答案中已经指出的那样:Point2D的继承层次结构......有点不寻常。原因很简单:

来自Point的文档:

  

表示(x,y)坐标空间中的位置的点,以整数精度指定。

     

自: 1.0

来自Point2D的文档:

  

Point2D类定义一个表示(x,y)坐标空间中位置的点。

     

<强>时间:       1.2

简单地说:Point类从一开始就存在,后来引入了Point2D类。然后,Point类已“改装”为Point2D,并提供getX()方法。

当您使用Point时,专注Point始终且仅 想要处理int坐标,您可以使用point.x直接访问该字段。

否则,当双坐标对您的应用案例有意义,并且您希望(例如)接收“点”作为参数的方法时,通常应该考虑使用抽象Point2D类,因为那样您可以将PointPoint2D.DoublePoint2D.Float实例传递给此方法。