当前位置:  开发笔记 > 编程语言 > 正文

定义true,false,unset状态的最佳方法

如何解决《定义true,false,unset状态的最佳方法》经验,为你挑选了5个好方法。

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

实现这一目标的最佳做法是什么?定义一个新的简单类,它能够表达所有三种状态或使用Java Boolean类并使用null来指示未设置状态?



1> Johannes Sch..:
Boolean a = true;
Boolean b = false;
Boolean c = null;

我会用那个.这是最直接的.

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

public enum ThreeState {
    TRUE,
    FALSE,
    TRALSE
};

第一个优点是你的类的用户不需要关心你的三态布尔值.他们还可以通过truefalse.如果你不喜欢它null,因为它在这里讲的含义相当少,你仍然可以public static final Boolean tralse = null;在课堂上创作.


每日WTF网站称第3个值应命名为"FILE_NOT_FOUND".请参阅:http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
我自己去布尔.整个TRUE,FALSE,FILE_NOT_FOUND/TRALSE只是在寻找麻烦.

2> voho..:

在Java 8中,还有Optional选项:

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

作为奖励,您将获得所有这些地图消费方法.



3> John Rudy..:

虽然不是特定于Java的,但在这种情况下我自己的偏好是定义一个ThreeState类或枚举并使用它 - 就像你提到的那样,一个True,一个False和一个Undefined(或者是Default,或者是Unset,作为你的特定领域)术语命令).感觉更好,更自然,更自我记录,而不是代表未设置/未定义null.



4> Chris Simpso..:

可以为空的布尔获得我的投票



5> Hates_..:

使用空值表示事物的状态是不良的设计。它没有描述性,很难维护。如果没有明确设置状态对象,我宁愿使用默认状态的State对象。例如:

if(state == null) {
    doSomething();
}

这没有告诉我有关预期状态的任何信息。像这样的东西更加清晰。

if(state.awaitingSet()) {
    doSomething();
}

更不用说可扩展了。当您需要第四种状态时会发生什么?

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有