我创建了一个枚举类命题,其中包含三个可能的常量,
public enum Proposition {
TRUE, FALSE, NULL;
}
Run Code Online (Sandbox Code Playgroud)
我想做到这一点,当我使用布尔运算符编写代码时
Proposition propA = Proposition.FALSE;
Proposition propB = Proposition.NULL;
Proposition propC = propA && propB;
Run Code Online (Sandbox Code Playgroud)
按照 Kleene 的逻辑,propC 将变为 NULL。https://en.wikipedia.org/wiki/Three-valued_logic
我将如何在 Java 中实现它?我必须使用方法还是可以使用布尔运算符?
您可以使用枚举方法自己实现这一点(类似于我们从 中得到的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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是与您的示例相对应的调用:
Proposition propA = Proposition.FALSE;
Proposition propB = Proposition.NULL;
Proposition propC = propA.and(propB);
System.out.println(propC); // NULL
Run Code Online (Sandbox Code Playgroud)
换句话说,调用.or()方法 for||和.and()方法 for &&。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |