[英]Using the boolean object equals() in my implemented equals()
所以我正在用Java做一個junit測試。
我應該測試兩種具體類型
public class BoolValue implements Value{
private boolean item;
//the Constructor
public BoolValue(boolean data){
item = data;
}
//checks to see if the current object is of the same type as the parameter
public boolean equals(Value v){
boolean result = false;
if (v instanceof BoolValue) {
if(this == v)
result = true;
}
return result; //true if equal
}
// returns current state string
public String toString(){
return " "+item;
}
}
這是我的測試文件中的測試用例
@Test
public void testBoolean(){
BoolValue value = new BoolValue(true);
BoolValue value2 = new BoolValue(true);
assertEquals(true, value.equals(value2));
}
它返回false而不是預期的true
在equals方法中,我想比較兩個布爾類型,但是我不能使用java.object equals(),因為程序將其讀取為類equals(),因此它是遞歸的。 我如何調用java.object equals()來比較布爾類型。 另外,我是否要以正確的方式
if (v instanceof BoolValue) {
if(this == v)
result = true;
}
當需要new BoolValue(true).equals(new BoolValue(true))
時,不能使用==
。 您需要比較其中的兩個item
。
另外,您需要接受Object
才能獲得“適當”的equals
方法。
@Override
public boolean equals(Object v){
return (v instanceof BoolValue && ((BoolValue)v).item == this.item);
}
當覆蓋equals
,還需要覆蓋hashCode
。
@Override
public int hashCode(){ return item ? 0 : 1; }
最后(除非打算使這些“值”可變),因為只有兩個可能的值,所以應將構造函數設為私有,並將這兩個值作為靜態字段提供(也可以使用enum
)。
public class BoolValue implements Value {
private final boolean item;
private BoolValue(boolean v){
this.item = v;
}
public static final BoolValue TRUE = new BoolValue(true);
public static final BoolValue FALSE = new BoolValue(false);
public static BoolValue valueOf(boolean x){
return x ? TRUE : FALSE;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.