2013-07-01 7 views
7

Nun, ich weiß, dass sie tun, nach meiner Erfahrung und der Oracle Java API-Dokumentation, aber ich frage mich warum. Durch den Konstruktor darf ich nur int Typargumente an die Klasse Rectangle übergeben, die interne Datendarstellung von x, y, etc. sind vom Typ int und auch setSize() werden nur Argumente des Typs int ausgeklammert. Aber warum geben alle Methoden wie getX(), getY(), getWidth() usw. ein Doppeltes zurück, wenn es keine Genauigkeit geben kann? Warum nicht einfach int s wie erwartet?Rectangle Klassenfunktionen getX(), getY(), usw. Rückgabe in doppelter Genauigkeit

EDIT: Ich verstehe, dass es aus der Rectangle2D Klasse abgeleitet ist, aber das ist noch kein Grund, nur einfach nicht int bieten -basierte getX() und getY() Funktionen, wie im Unterschied zu den Point und Point2D Klasse dieser Methoden sind nicht abstrakt. Auch setLocation() ist nicht abstrakt.

Antwort

3

Ich glaube, weil es Rectangle2D erstreckt, die in Graphics2D verwendet wird, und es sagt:

Diese Klasse nur die abstrakte Superklasse für alle Objekte, die ein 2D-Rechteck speichern. Die tatsächliche Speicherdarstellung der Koordinaten wird der Unterklasse überlassen.

Also, wenn einer ihrer Unterklasse repräsentiert die Dimensionen in double sollte vielleicht miteinander kompatibel sein. Wenn Sie das Javadoc für Rectangle#getX() lesen:

Gibt die X-Koordinate des umgebenden Rectangle in doppelter Genauigkeit zurück.

definiert durch:

public abstract double getX() in Klasse RectangularShape.

+0

Aber getX(), getY(), getWidth() Methoden nicht von Rectangle2D geerbt verwenden. Warum ist ihr Rückgabetyp doppelt? – Masudul

+0

Ah natürlich sind sie in der 'RectangularShape' Klasse angegeben. Thansk viel, ich habe mich schon eine ganze Weile gefragt. – Jori

0

Ich denke, sie setzen sie für perpose:
Wenn einige API die int Version des x benötigt oder y-Koordinate dann kann es direkt recObject.x oder recObject.y jeweils verwenden.
Wenn einige API die double Version des x benötigt oder y-Koordinate dann kann es getX() und getY()

+0

Ist das nicht eine schlechte Praxis, die Klassenfelder direkt und nicht über einen Getter/Setter in Java zu verwenden? – Jori

+0

@Jori: Weil es eine ziemlich alte API ist. Der Programmierer, der es geschrieben hat, wird sich vielleicht nicht damit befassen. Und später, für die Abwärtskompatibilität, kann sun Java den variablen Zugriffsmodifikator nicht auf privat ändern. – Mac