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

Should I use Point.x or Point.getX()?

我有一个Point。我正在尝试将 x 作为 int。如果我使用 Point.x,我将得到 x 作为 int。但我的印象是我应该尽可能使用 getter (Why use getters and setters?). The issue with Point.getX() 是 returns 一个双精度而不是一个整数。

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

ab?

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

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

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

由于doublereturn类型的getter方法点class只是通过继承使其兼容,而getX()做什么都没有,只有 returning 值。

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

Point class return 的 getX()getY() 函数是双精度的,因为它的父级 class (Point2D) requires. This is so all of its subclasses (Point2D.Double and Point2D.Float) 都将在相同的地方工作。

在这种情况下直接使用 point.xpoint.y 而不是使用 getter 函数可能没问题,因为点 class 是一个奇怪的极端情况,没有人似乎很喜欢——大多数人认为它应该是不可变的,或者至少最好隐藏它的值。

如果您害怕代码审查之类的事情,只需在其中发表评论,解释您为什么要直接访问 x 和 y 变量。

tl;dr:这完全取决于个人喜好。

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

来自Point的文档:

A point representing a location in (x,y) coordinate space, specified in integer precision.

Since: 1.0

来自Point2D的文档:

The Point2D class defines a point representing a location in (x,y) coordinate space.

Since: 1.2

简单的说:Pointclass自古就有,Point2Dclass是后来引入的。 Point class 被“改装”为 Point2D,并提供 getX() 方法,例如。


当您与 Point 一起工作时,并且只Point 一起工作,并且您 总是 并且想处理int坐标,那么可以用point.x直接访问字段

否则,当双坐标对您的应用案例有意义,并且您想要一个接收“点”作为参数的方法时,您通常应该考虑使用抽象 Point2D class,因为这样你就可以将 PointPoint2D.DoublePoint2D.Float 实例传递给此方法。