2012-02-28 12 views
8

me sorprende ver que captadores de height y width miembros tiene return tipo double, aunque son int. Por otra parte, setSize método con parámetros dobles tiene la siguiente definición:Método tipo de retorno en clase Dimensión de java.awt

/** 
* Sets the size of this <code>Dimension</code> object to 
* the specified width and height in double precision. 
* Note that if <code>width</code> or <code>height</code> 
* are larger than <code>Integer.MAX_VALUE</code>, they will 
* be reset to <code>Integer.MAX_VALUE</code>. 
* 
* @param width the new width for the <code>Dimension</code> object 
* @param height the new height for the <code>Dimension</code> object 
*/ 
public void setSize(double width, double height) { 
    this.width = (int) Math.ceil(width); 
    this.height = (int) Math.ceil(height); 
} 

Por favor, echar un vistazo a Dimension clase. El comentario anterior dice que los valores no pueden ir más allá de Integer.MAX_VALUE. ¿Por qué? ¿Por qué tenemos double entre medio? ¿Hay alguna razón sutil? ¿Alguien puede explicarme esto? Perdón por mi insistencia!

Respuesta

3

java.awt.Dimension fue adaptado para encajar en el paquete java.awt.geom, por lo que se puede usar donde sea que se requiera Dimension2D. La interfaz para las ofertas posteriores con punto flotante, por lo que Dimension tiene que hacerlo también. Al estar limitado a los campos int, solo se puede representar un subconjunto de double s. Dimension2D.Float está restringido de manera similar.

3

La clase está almacenando height y width como int, sólo se proporciona un método que acepte doble también, así se le puede llamar con los valores dobles (pero que son echados a int). Hay otros métodos setSize() en este archivo que aceptan valores int o incluso un objeto Dimension.

Y como estos valores se almacenan como int, por supuesto su valor máximo es Integer.MAX_VALUE.

+1

¿Eso es? ¿Por qué tenemos getters con 'double' como' return' type? Cualquier uso? – Ahamed

+0

No sé la razón exacta por la que regresan como dobles (probablemente porque cuando se habla de dimensiones, se habla de precisión y el doble se usa más en estos casos), pero para los instaladores, es solo una sobrecarga de método para ayuda al usuario – talnicolas

+0

Gracias por su respuesta, no creo que 'double's tener valores int ayudará en la precisión. Quiero decir que el doble 1517.00 es igual a 1517, ¿entonces debe haber alguna razón? – Ahamed

0

Puede usar la clase Java Dimension con ints. Si necesita una clase Dimensión con doble ancho y alto, podría usar lo siguiente:

public class DoubleDimension { 
    double width, height; 

    public DoubleDimension(double width, double height) { 
     super(); 
     this.width = width; 
     this.height = height; 
    } 

    public double getWidth() { 
     return width; 
    } 

    public void setWidth(double width) { 
     this.width = width; 
    } 

    public double getHeight() { 
     return height; 
    } 

    public void setHeight(double height) { 
     this.height = height; 
    } 

    @Override 
    public String toString() { 
     return "DoubleDimension [width=" + width + ", height=" + height + "]"; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     long temp; 
     temp = Double.doubleToLongBits(height); 
     result = prime * result + (int) (temp^(temp >>> 32)); 
     temp = Double.doubleToLongBits(width); 
     result = prime * result + (int) (temp^(temp >>> 32)); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     DoubleDimension other = (DoubleDimension) obj; 
     if (Double.doubleToLongBits(height) != Double.doubleToLongBits(other.height)) 
      return false; 
     if (Double.doubleToLongBits(width) != Double.doubleToLongBits(other.width)) 
      return false; 
     return true; 
    } 
} 
Cuestiones relacionadas