2013-07-01 25 views
7

Beh, so che lo fanno, secondo la mia esperienza e la documentazione dell'API Java Oracle, ma mi chiedo perché. Attraverso il costruttore che sto solo permesso di passare int argomenti di tipo alla classe Rectangle, la rappresentazione interna dei dati di x, y, ecc sono di tipo int e anche setSize() eccettua solo argomenti del tipo int. Ma perché tutti i metodi come getX(), getY(), getWidth(), ecc. Restituiscono un doppio quando non può esserci alcuna precisione? Perché non semplici int s come previsto?Le funzioni di classe Rectangle getX(), getY(), ecc. Restituiscono in doppia precisione

EDIT: Capisco che è derivato dalla classe Rectangle2D, ma che è ancora alcun motivo per semplicemente non fornire alcuna int -based getX() e getY() funzioni, come nella differenza con la Point e Point2D classe quei metodi non sono astratti. Anche lo setLocation() non è astratto.

risposta

3

credo perché estende Rectangle2D che viene utilizzato in Graphics2D, e dice:

Questa classe è solo la superclasse astratta per tutti gli oggetti che memorizzano un rettangolo 2D. La rappresentazione di memoria effettiva delle coordinate è lasciata alla sottoclasse.

Quindi, se i rispettivi sottoclasse rappresenta le dimensioni in double devono essere compatibili tra loro, forse. Se leggete il Javadoc per Rectangle#getX():

Restituisce la coordinata X del rettangolo in doppia precisione.

Specified by:

public abstract double getX() in classe RectangularShape.

+0

Ma coordinatax(), Gety(), metodi getWidth() non ereditato da Rectangle2D. Quindi, perché il loro tipo di ritorno è doppio? – Masudul

+0

Ah, naturalmente, sono specificati nella classe 'RectangularShape'. Grazie mille, mi chiedevo questo per un bel po 'ora. – Jori

0

Credo li mettono in perpose:
Se alcune API richiede la versione int del xoy coordinate allora può utilizzare direttamente o recObject.x recObject.y rispettivamente.
Se alcune API richiede la versione double del xoy coordinate allora può utilizzare coordinatax() e Gety()

+0

Non è considerata una cattiva pratica, usare i campi di classe direttamente e non attraverso un getter/setter in Java? – Jori

+0

@Jori: perché è piuttosto una vecchia API. Il programmatore che l'ha scritto potrebbe non esaminare la questione. E in seguito per la retrocompatibilità, sun java non può modificare il modificatore di accesso variabile a privato. – Mac