定义真、假、未设置状态的最佳方式

2022-09-01 14:54:07

如果您需要知道未设置布尔值的位置(例如,如果该未设置的值应从父值继承),则 Java 布尔基元(以及其他语言中的等效值)显然是不够的。

实现此目的的最佳实践是什么?定义一个能够表达所有三种状态的新简单类,或者使用 Java 布尔类并使用 null 来指示未设置的状态?


答案 1
Boolean a = true;
Boolean b = false;
Boolean c = null;

我会用它。这是最直截了当的。

另一种方法是使用枚举。也许这更好,更快,因为不需要拳击:

public enum ThreeState {
    TRUE,
    FALSE,
    TRALSE
};

首先,您的类的用户不需要关心您的三态布尔值。他们仍然可以通过和。如果你不喜欢 ,因为它在这里对它的含义知之甚少,你仍然可以在你的课堂上做一个。truefalsenullpublic static final Boolean tralse = null;


答案 2

在Java 8中,还有可选选项:

public static final Optional<Boolean> TRI_TRUE = Optional.of(true);
public static final Optional<Boolean> TRI_FALSE = Optional.of(false);
public static final Optional<Boolean> TRI_UNKNOWN = Optional.empty();

作为奖励,您将获得所有这些地图和使用方法