Java中能否用布尔运算符实现三值逻辑?如何实现?
Java 实现三值逻辑枚举运算的方案
Java 不支持运算符重载,原生
&&、||、!等布尔运算符仅可作用于boolean基本类型和对应的Boolean包装类,无法直接用于自定义枚举实例的运算,你必须通过自定义方法实现相关逻辑。
完整实现代码
public enum Proposition { TRUE, FALSE, NULL; // Kleene三值逻辑 与运算 public Proposition and(Proposition other) { if (this == FALSE || other == FALSE) { return FALSE; } if (this == NULL || other == NULL) { return NULL; } return TRUE; } // Kleene三值逻辑 或运算 public Proposition or(Proposition other) { if (this == TRUE || other == TRUE) { return TRUE; } if (this == NULL || other == NULL) { return NULL; } return FALSE; } // Kleene三值逻辑 非运算 public Proposition not() { return switch (this) { case TRUE -> FALSE; case FALSE -> TRUE; case NULL -> NULL; }; } }
使用方法
你需要将原生布尔运算符替换为自定义的方法调用即可完成运算:
Proposition propA = Proposition.FALSE; Proposition propB = Proposition.NULL; // 对应原需求中的 propA && propB 逻辑 Proposition propC = propA.and(propB);
- 标准Kleene三值逻辑中,
FALSE和任意值做与运算结果均为FALSE,如果你的业务需求需要调整为示例中所说的返回NULL,可自行修改and方法中的判断逻辑。 - 如果需要实现短路逻辑,可额外增加入参为
Supplier<Proposition>的重载方法,避免不必要的运算。
内容的提问来源于stack exchange,提问作者Simone Tarenzi
相关产品推荐
相关产品推荐

