2013-07-01 10 views
7

私の経験とOracle Java APIのドキュメントによれば、それはわかっています。唯一のタイプintの引数をexceptsでタイプintのものであり、またsetSize() Iのみ等Rectangleクラス、Xの内部データ表現、Y、にint型引数を渡すことが許されていコンストラクタを通して 。 しかし、なぜ精度がない場合は、getX()getY()getWidth()などのすべてのメソッドが2倍に戻りますか?単純なのはなぜでしょうか?intは期待どおりですか?Rectangleクラスの関数getX()、getY()などが倍精度で返される

EDIT: は、私はそれがRectangle2Dクラスから派生していることを理解して、それはまだ単にPointPoint2Dクラスこれらのメソッドとの違いのように、任意のintgetX()getY()機能をベース提供しないという理由ではありません抽象的ではありません。また、setLocation()も抽象的なものではありません。

答えて

3

それはGraphics2Dで使用されているRectangle2Dを拡張し、それが言うので、私は信じている:

このクラスは、2D矩形を格納するすべてのオブジェクトの抽象スーパークラスです。 座標の実際の記憶域表現はサブクラスに委ねられます。

したがって、そのサブクラスのいずれかが doubleのディメンションを表す場合は、おそらく互いに互換性があります。 Rectangle#getX()のJavadocを読んだ場合:

境界の四角形のX座標を倍精度で返します。

定義:クラスのRectangularShapeはで

public abstract double getX()

+0

getX、getY、getWidth()メソッドはRectangle2Dから継承されません。だから、なぜ彼らの戻り値の型がdoubleですか? – Masudul

+0

もちろん、それらは 'RectangularShape'クラスで指定されています。 Thanskたくさん、私はこれについてかなり長い間疑問視していました。 – Jori

0

私は彼らがperposeのためにそれらを置くと思う:
いくつかのAPIは、xまたはyのintバージョン座標必要がある場合、それは直接それぞれrecObject.xまたはrecObject.yを使用することができます。
一部のAPIにx座標またはy座標のバージョンdoubleが必要な場合は、getX()およびgetY()を使用できます。

+0

Javaのgetter/setterではなく、クラスフィールドを直接使用するのは悪い習慣とは考えられていませんか? – Jori

+0

@悟:それはかなり古いAPIなので。それを書いたプログラマーはこの問題を調べないかもしれません。そして、後の互換性のために、Javaは変数アクセス修飾子をprivateに変更できません。 – Mac

関連する問題