Тип возврата метода в классе Dimension класса java.awt - PullRequest
8 голосов
/ 28 февраля 2012

Я удивлен, увидев, что получатели height и width членов имеют return тип double, хотя они int. Кроме того, метод setSize с двойными параметрами имеет следующее определение:

/**
 * 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);
}

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

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

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

3 голосов
/ 28 февраля 2012

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

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

0 голосов
/ 14 февраля 2018

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

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