使用三值逻辑变量的最佳方法

时间:2017-01-12 08:01:23

标签: java

我正在寻找实现三值逻辑的最佳方法。

我用Google搜索并发现了三种不同的方法:

  1. null变量的Boolean值用作未定义

    此变体对我来说很危险,因为它可能会意外地导致NullPointerException

  2. 使用Optional<Boolean>类型

    这种变体仍然有点危险。为了避免NoSuchElementException,你应该使用这样的结构:

    Optional<Boolean> amIRight = Optional.empty();
    if (Optional.of(true).equals(amIRight ) {
        doSome();
    }
    

    对我来说这看起来太罗嗦了

  3. 实施自己的枚举

    最后一个变种似乎是最好的。几乎安全,非常简单,不成功。但我还没有在广泛传播的java libriaries中找到任何这样的枚举,比如Apache,Google Guava等等。对我来说这看起来很奇怪,每个人都避免了更简单和最安全的实现。

    可能是我遗漏了一些东西,并且有充分的理由不实施三值逻辑枚举。

3 个答案:

答案 0 :(得分:3)

如果enum适合你,那就去吧 不要使用那个布尔值,它是丑陋的并且破坏了可读性......我也无法想象如果你希望以后支持4个值会有多可怕......

其他警告/建议:

您确定只使用3个值吗?    在许多情况下,设计往往会发生变化,而且枚举将不再足够 使用封装enum(或int)的类可以提供更好的灵活性 但是,您可以稍后从枚举更改为类。

在我的节目中,我广泛使用枚举 你不应该太在意流行的图书馆做什么,只要选择最适合你的工作!

关于非常有趣的假设:

  

......有充分理由不实施三值逻辑枚举。 ...

假设我是Java语言设计师 你要求3-logic enum 我接受你的建议。

然后,Mr.2D询问&#34;我们有3-logic enum。为什么不提供4-logic enum来支持+x -x +y -y?&#34; 我给他他想要的东西。

之后,Mr.LoveFive Mr.ObsessiveSick .....我认为你明白了。

必须有一个阈值(何时停止),并且与2-enum(布尔值)相比,对3-enum的需求相对非常低。

答案 1 :(得分:2)

我同意enums是迄今为止最安全,最好的解决方案。也许枚举在Apache这样的项目中没有被广泛使用,因为枚举在Java中相对较新(我认为它们出现在Java 1.5中)。

答案 2 :(得分:0)

如果你想要3值逻辑,你不再谈论简单的真/假条件,你在谈论状态机。可以说,状态机是编程中最强大的范例之一。如果您不熟悉自动机理论,请查阅。