2012-02-28 23 views
8

Tôi ngạc nhiên khi thấy rằng getters của heightwidth thành viên có return loại double, mặc dù chúng là int. Hơn nữa, phương pháp setSize với các thông số đôi có định nghĩa sau đây:Loại trả về phương thức trong lớp Thứ nguyên của 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); 
} 

hãy có một cái nhìn tại Dimension lớp. Nhận xét trên cho biết các giá trị không thể vượt quá Integer.MAX_VALUE. Tại sao? Tại sao chúng tôi có double ở giữa? Có lý do tinh tế nào không? Bất cứ ai có thể vui lòng giải thích điều này với tôi? Xin lỗi vì sự khăng khăng của tôi!

Trả lời

3

java.awt.Dimension được trang bị thêm để vừa với gói java.awt.geom, để nó có thể được sử dụng ở bất kỳ đâu cần Dimension2D. Giao diện cho các giao dịch sau đó với điểm nổi, do đó, Dimension cũng phải. Bị giới hạn ở các trường int, chỉ có thể đại diện cho một tập con gồm double. Dimension2D.Float bị hạn chế tương tự.

3

Lớp lưu trữ heightwidthint, nó chỉ cung cấp một phương thức chấp nhận gấp đôi để bạn có thể gọi nó với giá trị gấp đôi (nhưng chúng được đúc thành int). Có những người khác setSize() phương pháp trong tập tin này mà chấp nhận int giá trị hoặc thậm chí là một đối tượng Dimension.

Và vì các giá trị này được lưu trữ dưới dạng int, tất nhiên giá trị tối đa của chúng là Integer.MAX_VALUE.

+1

Thats it? Tại sao chúng ta có getters với 'double' như' return' type? Bất kỳ sử dụng? – Ahamed

+0

Tôi không biết lý do chính xác tại sao họ trở lại gấp đôi (có lẽ vì khi nói về kích thước, bạn đang nói về độ chính xác và gấp đôi được sử dụng nhiều hơn trong những trường hợp này), nhưng đối với những người định cư, nó chỉ là một số phương pháp quá tải giúp người dùng. – talnicolas

+0

Cảm ơn bạn đã trả lời của bạn, tôi không nghĩ rằng 'double' s có giá trị int sẽ giúp chính xác. Tôi có nghĩa là đôi 1517,00 bằng 1517, vì vậy phải có một số lý do? – Ahamed

0

Bạn có thể sử dụng lớp Dimension java với ints. Nếu bạn cần lớp Thứ nguyên có chiều rộng và chiều cao gấp đôi, bạn có thể sử dụng các mục sau:

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; 
    } 
} 
Các vấn đề liên quan