2010-10-03 29 views
15

Tôi có điểm lớp đơn giản với hai trường loại double. Tôi đã hỏi Eclipse 3.6 để tạo ra equals()hashCode() cho nó. Phương pháp equals() trông như thế này:bằng() được tạo bởi Eclipse: getOuterType()?

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Point other = (Point) obj; 
    if (!getOuterType().equals(other.getOuterType())) 
     return false; 
    if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) 
     return false; 
    if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) 
     return false; 
    return true; 
} 

getOuterType trông như thế này:

private Point getOuterType() { 
    return Point.this; 
} 

Vì vậy, câu hỏi là: Mục đích của getOuterType().equals(other.getOuterType()) dòng là gì?

+0

bạn có lớp học bên trong không? – Bozho

+0

Nó chỉ ra rằng tôi có, cảm ơn, nó được giải quyết. –

Trả lời

13

Vâng, nếu lớp học của bạn là lớp bên trong (lớp lồng nhau không tĩnh), nó có một thể hiện bên ngoài, kèm theo. Hai đối tượng của một kiểu lớp bên trong không thực sự bằng nhau trừ khi các cá thể kèm theo cũng bằng nhau; ví dụ bên ngoài như một trường ẩn (thường có tên là this$0 bởi javac).

+0

Eclipse dường như nghĩ rằng đó là một lớp bên trong. Nếu không, nó sẽ không tạo ra phương thức 'getOuterType'. – Grodriguez

+0

Cảm ơn, Chris! Câu hỏi thực sự xuất phát từ học trò của tôi, có vẻ như cậu ấy thực sự đặt lớp của mình vào bên trong một số khác. (Tôi không thể tái tạo điều này trên máy tính của tôi cho đến khi đưa lớp vào bên trong câu trả lời khác.) –

+0

Grodriguez, vâng, cảm ơn! –

Các vấn đề liên quan