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

7
我有一个Point对象。我想获取x值并将其作为int类型使用。如果使用Point.x,可以将x作为int类型获取。但是根据通用的最佳实践(为什么要使用getter和setter?),尽可能使用getter方法。使用Point.getX()会出现问题,因为它返回double而不是int。
哪个更好呢?还是只是个人喜好?
a或b?
Point point = new Point(5, 5);
int a = point.x;
int b = (int) point.getX();

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


3
我使用point.xPoint出现问题并不是的错。 :-) 不像你的代码会适用于Point的子/超类型一样。 - aioobe
4个回答

4
Point类的getX()getY()函数返回一个double值,因为其父类(Point2D)需要这样做。 这是为了使其所有子类(Point2D.DoublePoint2D.Float)在相同的地方工作。

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

如果您担心像代码审查之类的事情,只需在其中添加一个注释,解释为什么要直接访问x和y变量。

简而言之:这只取决于个人喜好。


1
我认为,简而言之,这个类的设计者不想创建另外两个函数getXAsInteger和getYAsInteger,但仍然想给你获取底层整数值的选项,而不是转换为double类型的值。因此在这种情况下要特殊处理并直接使用字段。

1
作为点类的getter方法的返回类型是双精度,只是为了使其在继承中兼容,并且getX()没有任何操作,只是返回值。
所以,这只是关于你的偏好,我想。
但是,在这种情况下仅使用point.x(为什么要进行不必要的转换?),虽然我更喜欢始终使用getter/setter。

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实例传递给此方法。


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