Java 使用三值逻辑变量的最佳方法
我正在寻找实现三值逻辑的最佳方法 我在谷歌上搜索发现了三种不同的方法:Java 使用三值逻辑变量的最佳方法,java,Java,我正在寻找实现三值逻辑的最佳方法 我在谷歌上搜索发现了三种不同的方法: 使用null值作为未定义的Boolean变量 这个变体对我来说很危险,因为它可能意外地导致NullPointerException 使用可选类型 这种变体仍然有点危险。要避免NoTouchElementException,应使用如下结构: Optional<Boolean> amIRight = Optional.empty(); if (Optional.of(true).equals(amIRight ) {
null
值作为未定义的Boolean
变量
这个变体对我来说很危险,因为它可能意外地导致NullPointerException
可选
类型
这种变体仍然有点危险。要避免NoTouchElementException
,应使用如下结构:
Optional<Boolean> amIRight = Optional.empty();
if (Optional.of(true).equals(amIRight ) {
doSome();
}
Optional amIRight=Optional.empty();
if(可选).of(真).equals(右){
doSome();
}
这对我来说太罗嗦了我同意enum是迄今为止解决您的问题的最安全和最好的解决方案。可能enum在Apache这样的项目中没有广泛使用,因为enum在Java中相对较新(我认为它们是在Java 1.5中出现的)。如果enum适合您,那么就使用它。
不要使用那个布尔值,它很难看并且破坏了可读性…我也无法想象如果你想让它在以后支持4个值会有多可怕 其他注意事项/建议: 您确定只使用3个值吗?
在许多情况下,设计往往会发生变化,枚举将不再足够。
使用封装enum(或int)的类可以提供更好的灵活性。
但是,您可以稍后从枚举更改为类 在我的程序中,我广泛使用enum。
你不应该太在意流行的图书馆做什么,只要选择最适合你的 关于非常有趣的假设: …有充分的理由不实现三值逻辑枚举 假设我是Java语言设计师。
您需要一个
3逻辑枚举
我接受你的建议 然后,
Mr.2D
询问“我们有3-logic enum
。为什么不提供4-logic enum
来支持+x-x+y-y
?”我给他想要的 在那之后,
LoveFive先生
强迫症先生
…我想你明白了
必须有一个阈值(何时停止),与2-enum(布尔值)相比,3-enum的需求相对较低.如果你想要三值逻辑,你不再谈论简单的真/假条件,你谈论的是状态机。可以说,状态机是编程中最强大的范例之一。如果你不熟悉自动机理论,请查阅。使用枚举。1.枚举仍然可以是
null
,因此它不是与仅使用Boolean
不同,2.对于Optional
使用someOptional.orElse(false)
比您当前的“解决方案”更短、更容易阅读。@MarkrotVeel Null不是重点。重点是布尔值不应该是。@MarkrotVeel是的,它可以,但我几乎无法想象会这样做的enybody。我也很难想象enybody会期望某个方法可以将Null作为布尔结果返回。@MarkrotVeel你的someOptional.orElse(false)不是我想要的,因为我需要一个可以帮助我比较值的解决方案。我需要知道值是正确的还是错误的。(新的?不是真的,Java 1.5是从2004年开始的)“相对的”新的。我仍然遇到许多最初在Java 1.5之前编写的Java API,并且没有花时间/精力切换到使用Enum。好的,也许我调用Enum new显示了我的年龄。我从1.2天开始使用Java:)