所以這是單元測試的一部分:爲什麼平等的方法是多餘的?
public class LocationTester {
private Floor seventhFloor;
private int size = 10;
@Before
public void setup() {
size = 10;
seventhFloor = new Floor(7, size);
}
@Test
public void testLocationEquality() {
Location l1 = new Location(seventhFloor, 3, 3);
Location l2 = new Location(new Floor(7, size), 3, 3);
assertTrue(l1.equals(l2));
}}
這裏的位置類的部分與equals方法:
class Location {
private Floor floor;
private int size, position;
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj instanceof Location) {
return false;
}
return equals((Location) obj);
}
public boolean equals(Location loc) {
return floor.equals(loc.floor) && position == loc.position && size == loc.size;
}
而這裏的地板類的部分:
class Floor {
private int number;
public boolean equals(Floor floor) {
return number == floor.number;
}
我不知道爲什麼在「位置l2 =新位置(新樓層(7,大小),3,3)」參數(Object obj)和類型轉換的等值方法被放在「新位置」時;實際上是位置本身的對象。爲什麼需要把equals(Object obj)。
測試運行正常,但沒有方法equals(Object obj)。
更何況,這個項目中沒有Location的子類。那麼爲什麼把類型轉換爲「返回等於((Location)obj)」;無論如何?
爲什麼*什麼*返回true? 'equals(Object)','equals(Location)'或'equals(Floor)'?請澄清,理想情況下將其降低爲[mcve],以便爲缺乏清晰度提供更小的範圍。 –
請注意,在這個例子中應該有一個編譯錯誤 - 位置的「equals(Location loc)」正在訪問對象的專用字段。 –
@JanezKuhar Location中的方法被允許訪問Location的私有字段。 – khelwood