我应该使用 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 一个双精度而不是一个整数。
哪个更好,还是只是偏好?
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,但它并没有真正回答我的问题。或者至少我不明白答案。
简而言之,我认为 class 的设计者不想创建另外两个函数 getXAsInteger 和 getYAsInteger,但仍然为您提供获取基础整数值的选项,而不是值转换为 double。所以在这种情况下破例并直接使用这些字段。
由于double
return类型的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.x
和 point.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
简单的说:Point
class自古就有,Point2D
class是后来引入的。 Point
class 被“改装”为 Point2D
,并提供 getX()
方法,例如。
当您与 Point
一起工作时,并且只 与 Point
一起工作,并且您 总是 并且只想处理int
坐标,那么可以用point.x
直接访问字段
否则,当双坐标对您的应用案例有意义,并且您想要一个接收“点”作为参数的方法时,您通常应该考虑使用抽象 Point2D
class,因为这样你就可以将 Point
、Point2D.Double
或 Point2D.Float
实例传递给此方法。
我有一个Point
。我正在尝试将 x
作为 int
。如果我使用 Point.x
,我将得到 x
作为 int
。但我的印象是我应该尽可能使用 getter (Why use getters and setters?). The issue with Point.getX()
是 returns 一个双精度而不是一个整数。
哪个更好,还是只是偏好?
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,但它并没有真正回答我的问题。或者至少我不明白答案。
简而言之,我认为 class 的设计者不想创建另外两个函数 getXAsInteger 和 getYAsInteger,但仍然为您提供获取基础整数值的选项,而不是值转换为 double。所以在这种情况下破例并直接使用这些字段。
由于double
return类型的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.x
和 point.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
简单的说:Point
class自古就有,Point2D
class是后来引入的。 Point
class 被“改装”为 Point2D
,并提供 getX()
方法,例如。
当您与 Point
一起工作时,并且只 与 Point
一起工作,并且您 总是 并且只想处理int
坐标,那么可以用point.x
直接访问字段
否则,当双坐标对您的应用案例有意义,并且您想要一个接收“点”作为参数的方法时,您通常应该考虑使用抽象 Point2D
class,因为这样你就可以将 Point
、Point2D.Double
或 Point2D.Float
实例传递给此方法。