簡體   English   中英

在實現的equals()中使用布爾對象equals()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM