用布尔运算符实现三值逻辑运算?

Implementing a three-valued logic operation with Boolean operators?

我创建了一个枚举 class 具有三个可能常量的命题,

public enum Proposition {

    TRUE, FALSE, NULL;

} 

而且我想这样做,当我使用布尔运算符编写代码时

Proposition propA = Proposition.FALSE;

Proposition propB = Proposition.NULL;

Proposition propC = propA && propB;

propC 将变为 NULL,遵循 Kleene 的逻辑。 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);
    }
}

这是与您的示例对应的调用:

Proposition propA = Proposition.FALSE;
Proposition propB = Proposition.NULL;

Proposition propC = propA.and(propB);
System.out.println(propC); // NULL

换句话说,||调用.or()方法,&&调用.and()方法。