java - 用 boolean 运算符实现三值逻辑运算?

标签 java logic

我创建了一个带有三个可能常量的枚举类 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/

相关文章:

C 将 int 转换为位移运算符

JavaScript 逻辑搜索?

来自 CursorWindow 的 java.lang.IllegalStateException : Couldn't read row 0, col -1 - Android sqlite 问题

java - 将 JSON 扁平化为特定格式

java - 如何在 java 中读取 JSON-LD?

algorithm - 如果在 IF 语句中有 return 或 throw 语句,可以不使用 ELSE 语句吗?

logic - 能够解决 google code jam 问题集

java - 我们如何使用 Maven 在根级别为 AWS Lambda 生成包含所有已编译类文件和资源文件的 zip 部署包?

java - 如何使 JUNG 中的节点子集出现在一条直线上?

list - 从 Prolog 中的一个列表捕获值并添加到另一个列表