我只是想写一个比较学生姓名和部分的equals方法。如果名称和部分相同,则equals方法应该打印为true。否则它应该打印错误。
以下是我到目前为止的情况。
public class Student {
private String name;
private int section;
public Student(String name, int section) {
this.name = name;
this.section = section;
}
public boolean equals(Object y) {
if (this.name.equals(y.name) && this.section.equals(y.section)) {
return true;
}
else {
return false;
}
}
}
错误在于y.name
和y.section
。 Eclipse告诉我name
和section
无法解析为字段。
我的问题是,有人可以告诉我如何修复我的代码,以便我可以使用.equals()方法比较学生姓名和部分吗?
答案 0 :(得分:5)
y
您的Object
是Student
,不一定是if (y == this) return true;
if (y == null) return false;
if (y instanceof Student){
Student s = (Student) y;
// now you can access s.name and friends
。
你需要像
这样的代码{{1}}
答案 1 :(得分:2)
嗯..我不确定,但我认为Eclipse也应该有这个功能 - '添加标准等于方法' - 使用它然后你的IDE生成绝对正确的等于方法......但它是关于编码速度优化。现在让我们讲述equals方法。通常equals
方法契约自己定义transitiveness
...所以如果a等于b则b等于a。在这种情况下,建议有严格的限制:
public boolean equals(Object x) {
if (x == this) {
return true; // here we just fast go-out on same object
}
if (x == null || ~x.getClass().equals(this.getClass())) {
return false; // in some cases here check `instanceof`
// but as I marked above - we should have
// much strict restriction
// in other ways we can fail on transitiveness
// with sub classes
}
Student student = (Student)y;
return Objects.equals(name, student.name)
&& Objects.equals(section, student.section);
//please note Objects - is new (java 8 API)
//in order of old API usage you should check fields equality manaully.
}
答案 2 :(得分:1)
您缺少输入Cast Object to Student class;
@Override // you should add that annotation
public boolean equals(Object y) {