我有Point
。我想将x
作为int
。如果我使用Point.x
,我会x
作为int
。但我觉得我应该尽可能使用吸气剂(Why use getters and setters?)。 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,但它并没有真正回答我的问题。或者至少我不明白答案。
答案 0 :(得分:3)
getX()
类的getY()
和Point
函数返回一个double,因为它是其父类(Point2D)所需要的。这是因为它的所有子类(Point2D.Double和Point2D.Float)都可以在同一个地方工作。
直接使用point.x
和point.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
类,因为那样您可以将Point
,Point2D.Double
或Point2D.Float
实例传递给此方法。