在实现的equals()中使用布尔对象equals()

时间:2019-03-16 02:07:55

标签: java oop

所以我正在用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()来比较布尔类型。另外,我是否正在按照正确的方式进行操作

1 个答案:

答案 0 :(得分:4)

 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; }

最后(除非您打算使这些“值”可变),由于只有两个可能的值,因此应将构造函数设为私有并提供两个值作为静态字段(也可以使用{{1} }。

enum