如果您需要知道未设置布尔值的位置(例如,如果该未设置值应从父值继承),则Java布尔基元(以及其他语言中的等效项)显然是不够的.
实现这一目标的最佳做法是什么?定义一个新的简单类,它能够表达所有三种状态或使用Java Boolean类并使用null来指示未设置状态?
Joh*_*itb 44
Boolean a = true;
Boolean b = false;
Boolean c = null;
Run Code Online (Sandbox Code Playgroud)
我会用那个.这是最直接的.
另一种方法是使用枚举.也许这更好更快,因为不需要拳击:
public enum ThreeState {
TRUE,
FALSE,
TRALSE
};
Run Code Online (Sandbox Code Playgroud)
第一个优点是你的类的用户不需要关心你的三态布尔值.他们还可以通过true
和false
.如果你不喜欢它null
,因为它在这里讲的含义相当少,你仍然可以public static final Boolean tralse = null;
在课堂上创作.
voh*_*oho 13
在Java 8中,还有Optional选项:
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();
Run Code Online (Sandbox Code Playgroud)
作为奖励,您将获得所有这些地图和消费方法.
Joh*_*udy 10
虽然不是特定于Java的,但在这种情况下我自己的偏好是定义一个ThreeState类或枚举并使用它 - 就像你提到的那样,一个True,一个False和一个Undefined(或者是Default,或者是Unset,作为你的特定领域)术语命令).感觉更好,更自然,更自我记录,而不是代表未设置/未定义null
.
使用空值表示事物的状态是不良的设计。它没有描述性,很难维护。如果没有明确设置状态对象,我宁愿使用默认状态的State对象。例如:
if(state == null) {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
这没有告诉我有关预期状态的任何信息。像这样的东西更加清晰。
if(state.awaitingSet()) {
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
更不用说可扩展了。当您需要第四种状态时会发生什么?
归档时间: |
|
查看次数: |
29396 次 |
最近记录: |