2010-02-06 7 views
13

Derzeit verwende ich Rectangle und Rectangle2D (Rectangle2D.Double) Austausch.Rechteck und Rechteck2D Unterschied

Ich frage mich, was ist die Überlegung, die ich bei der Auswahl des richtigen Datentyps berücksichtigen werde? Ich sehe keinen offensichtlichen Unterschied, außer dass das Rectangle (Unterklasse von Rectangle2D) mehr API-Funktionen hat.

Danke.

+5

Es ist eine Vermächtnis Sache. 'Rectangle2D' wurde in einer späteren Version von Java als' Rectangle' hinzugefügt, und das Ergebnis ist Suns harscher Versuch, es zu lösen. – skaffman

Antwort

11

Rechteck verwendet int-Koordinaten. Rectangle2D ist eine abstrakte Klasse, die es nicht interessiert, ob Sie int, double oder float Koordinaten verwenden.

Wenn Sie die größere Genauigkeit von Doppel-und Float benötigen, müssen Sie mit Rectangle2D gehen.

Rectangle2D ist die Basisklasse, also wenn Sie Code schreiben, die in abstrakter Weise auf rechteckigen Formen arbeitet, gehen Sie für Rectangle2D, und weisen Sie es wie folgt:

Rectangle2D rect = new Rectangle2D.Double(double, double, double, double); 

oder

Rectangle2D rect = new Rectangle(int, int, int, int) 

Wenn Sie wissen, dass Sie nur mit Ints arbeiten, können Sie Rectangle den ganzen Weg verwenden.

Sie könnten sagen, dass Rectangle Rectangle2D.Integer aufgerufen werden sollte. Aber das ist es auch nicht, weil z.B. Rectangle ist das einzige der drei, das die serialisierbare Schnittstelle implementiert.

Wie skaffman kommentierte, ist es ein bisschen ein Erbe-Problem.

3

Klasse Rechteck erstreckt Rectangle2D, dies bedeutet, dass Sie immer ein Rechteck zu Rectangle2D umwandeln können, aber für das Gegenteil, könnten Sie Rectangle2D.getBounds() verwenden.