我正在对图像进行一些处理,并在我的工作中使用 package java.awt.geom
。我正在使用类Point
。此类扩展Point2D
并继承了返回 double 的 get 方法。Point
是一个点的整数表示。
要访问其中的整数x
和y
值,Point
您需要使用可公开访问的变量x
和y
;我的问题是
1) 允许公共访问实例变量不是不好的做法吗?例如。这个问题
2)有没有更好的设计?
是的,这是不好的做法(至少按照今天的标准),但这有几个原因......
Point2D
需要尽可能通用详细地...
Point2D
是一个通用对象,用于表示可以在 2D 空间中表示的任何类型的点。为了最大限度地用作泛型类,该点需要允许尽可能高的精度(即 a double
)。这通过返回s的getX()
andgetY()
方法很明显。double
通过使用double
s,它允许任何子类与这些方法兼容,因为 double 是具有精度的最大原始 Java 数字类型,因此任何使用任何其他原始数值变量的子类将始终能够将其返回为adouble
不失任何精度。Point
视为的简化版本Point2D
,这不保持任何精度 - 但是它仍然必须符合超类的抽象方法声明Point2D
。JVM 可以直接将Anint
转换为 adouble
而不会丢失任何精度 - 如果Point2D
不是 a double
,您将在转换期间丢失一些精度。(例如,您不能将其强制转换为 a float
,因为较大的int
值将无法直接表示为 afloat
而不砍掉一些较高的数字)File.separator
Point
是一个在很多地方使用的类,它本身仍然是一个非常通用的对象。程序员直接引用 anint
比每次想要获取 value 时都要强制转换要容易/简单/快捷得多(int)getX()
。JVM 处理它也更快,因为它不需要将 an 转换int
为 a double
,然后再转换回a int
。如果您想要更好的设计,您可能最好创建额外的方法来访问int
值作为int
s - 即创建方法getXInt()
and getYInt()
,然后将变量更改回非公共(前提是您不需要保留向后兼容性)。
1)是的,这是不好的做法。Point 是在 JDK 1.0 中引入的,Java 总是试图保持向后兼容性,这就是我认为过去没有改变的原因。
x
和有吸气剂y
。由于Point2D
. 这不是很好,但可以安全地转换为 an int
,因为返回的 Point 的值实际上是一个int
.
2)如果您需要处理 AWT,您应该简单地接受这一点。