2012-02-28 8 views
8

Я удивлен, что геттеры height и width членов имеют return типа double, хотя они int. Кроме того, setSize метод с двойными параметрами имеет следующее определение:Метод Тип возвращаемого в Dimension классе 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); 
} 

Пожалуйста, обратите внимание на Dimension класса. Выше комментария говорит, что значения не могут выходить за пределы Integer.MAX_VALUE. Зачем? Почему у нас есть double между? Есть ли какая-то тонкая причина? Может ли кто-нибудь объяснить это мне? Извините за мое настойчивость!

ответ

3

java.awt.Dimension был модифицирован для установки в пакет java.awt.geom, так что он может использоваться везде, где требуется Dimension2D. Интерфейс для более поздних сделок с плавающей запятой, так и Dimension. Будучи ограниченным полями int, может быть представлено только подмножество double. Dimension2D.Float также ограничен.

3

Класса хранение height и width как int, он просто предлагает способ, которые принимают двойной тоже так можно назвать с двойными значениями (но они тут же бросили в целом). Есть еще setSize() методов в этом файле, которые принимают значения int или даже объект Dimension.

И поскольку эти значения хранятся как int, их максимальное значение равно Integer.MAX_VALUE.

+1

Это что? Почему у нас есть getters с 'double' как' return' type? Любое использование? – Ahamed

+0

Я не знаю точной причины, по которой они возвращаются как двойные (возможно, потому, что когда речь идет о измерениях, вы говорите о точности, а в этих случаях чаще используется double), но для установщиков это просто перегрузка метода помочь пользователю. – talnicolas

+0

Спасибо за ваш ответ, я не думаю, что 'double', имеющие значения int, помогут в точности. Я имею в виду, что двойной 1517,00 равен 1517, так что должна быть какая-то причина? – Ahamed

0

Вы можете использовать класс измерения java с помощью ints. Если вам нужен класс измерения с двойной шириной и высотой, вы можете использовать следующее:

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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^