我正在尝试制作“摇滚,纸张,剪刀”的游戏。我有这样的测试:
@Test
public void rockBeatsScissors() {
assertEquals(rock, rock.vs(scissors));
}
我认为写一个函数Equals就足够了,例如:
public class Rock {
Object vs(Scissors s) {
return new Rock();
}
Object vs(Paper p) {
return new Paper();
}
Object vs(Rock r) {
return new Rock();
}
boolean equals(Rock r) {
return true;
}
boolean equals(Paper p) {
return false;
}
boolean equals(Scissors s) {
return false;
}
}
(我知道我应该添加一个HashCode函数,顺便说一下) 我运行测试,但我只是失败了。我做错了什么?
答案 0 :(得分:3)
equals()
使用的assertEquals()
方法将Object
作为参数。现在,你还没有覆盖Object#equals()
方法,但提供了你自己的3个equals方法,甚至不使用它,因此使用了默认的Object
类方法,它只是参考比较。
您需要进行以下实施:
/**
* Terrible `equals()` method implementation. Just for demonstration purpose.
*/
@Override
public boolean equals(Object obj) {
return obj instanceof Rock;
}