这是我的超类equals()方法:
public boolean equals(Object other){
Car c = (Car)other;
if(this.make.equals(c.make) && this.model.equals(c.model)){
System.out.println("True, Cars are equal");
return true;
}
else
System.out.println("False, Cars are not equal");
return false;
}
这是我的子类equals()方法:
public boolean equals(Object other) {
GreenCar g = (GreenCar) other;
if(super.equals(g)==true){
if (this.type.equals(g.type)) {
System.out.println("True, Cars are equal");
return true;
} else {
System.out.println("False, Cars are not equal");
return false;
}
}
else
System.out.println("False, Cars are not equal");
return false;
}
当它在if(super.equals(g)==true){
运行检查时,它会执行该方法并输出true或false。我怎样才能检查返回值?
答案 0 :(得分:1)
如果不打印任何内容,就无法运行该方法。
这就是为什么你的大多数方法不应该具有“副作用”(比如在屏幕上打印东西)。
从println
两种方法中删除equals
次来电。将它们添加到调用equals
的代码中。
答案 1 :(得分:0)
就像人们说过你需要取出那些println的时候,如果你想让它在你打电话时不打印,因为每次你打电话给它时都会打印出来。
就像一个注释一样,你可以通过取出那些方法来缩短你的一些方法,因为如果条件为真,它将在返回下一个代码体之前返回。例如
public boolean equals(Object other){
Car c = (Car)other;
if(this.make.equals(c.make) && this.model.equals(c.model))//if this is true
return true;//the method ends here
return false;//if the method hasn't ended yet then the conditional must be false
}
另外我注意到你使用了if(super.equals(g)==true)
但是如果你只是放if(super.equals(g))
它会产生相同的效果,因为你输入了一个布尔值,它会检查布尔值是否为真。如果你希望得到if((boolean)==false)
的效果,你可以if(!(boolean))
,因为它会检查该布尔值的反面是否为真。
答案 2 :(得分:0)
在super
课程中,您可以编写类似
protected boolean equals(Object other, boolean debug) {
if (other instanceof Car) {
Car c = (Car) other;
if (this.make.equals(c.make) && this.model.equals(c.model)) {
if (debug) {
System.out.println("True, Cars are equal");
}
return true;
}
}
if (debug) {
System.out.println("False, Cars are not equal");
}
return false;
}
然后你可以修改你的equals()
方法(仍在super
类中),如
public boolean equals(Object other) {
return equals(other, true); // <-- default to debug.
}
接下来,您的subclass
应该调用带有debug
标记的版本,如
if (super.equals(g, false)) { // you don't need == true
或者,您可以使用Logger
并根据需要启用和停用debug
。