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