我创建了一个带有三个可能常量的枚举类 Proposition,
public enum Proposition {
TRUE, FALSE, NULL;
}
我希望这样,当我使用 boolean 运算符编写代码时
Proposition propA = Proposition.FALSE;
Proposition propB = Proposition.NULL;
Proposition propC = propA && propB;
按照 Kleene 的逻辑,propC 将变为 NULL。 https://en.wikipedia.org/wiki/Three-valued_logic
我如何在 Java 中实现它?我必须使用方法还是可以使用 boolean 运算符?
最佳答案
您可以使用枚举方法自行实现(类似于我们从 Predicate
获得的方法); Java 中的运算符不能被覆盖。这是一个例子:
enum Proposition {
TRUE(Boolean.TRUE),
FALSE(Boolean.FALSE),
NULL(null) {
@Override
public Proposition and(Proposition other) {
return this;
}
@Override
public Proposition or(Proposition other) {
return this;
}
};
private final Boolean value;
Proposition(Boolean value) {
this.value = value;
}
public Proposition and(Proposition other) {
if (NULL == other) return NULL;
return of(this.value && other.value);
}
public Proposition or(Proposition other) {
if (NULL == other) return NULL;
return of(this.value || other.value);
}
public static Proposition of(Boolean bool) {
return null == bool ? NULL : (bool ? TRUE : FALSE);
}
}
这是与您的示例相对应的调用:
Proposition propA = Proposition.FALSE;
Proposition propB = Proposition.NULL;
Proposition propC = propA.and(propB);
System.out.println(propC); // NULL
换句话说,请调用.or()
方法||
和.and()
方法&&
.
关于java - 用 boolean 运算符实现三值逻辑运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69978662/