所以这是单元测试的一部分:为什么平等的方法是多余的?
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