使用布尔对象

时间:2010-10-12 19:09:12

标签: java netbeans if-statement boolean

我在尝试获得我想要的结果时遇到了问题。基本上我想做的是有一个布尔对象,这将允许我有3个选择,如果邮件程序是旧的我希望它被设置为false(意思是不包含“mapQ.cmd”和“add-coid.cmd” “文件”

如果邮件程序是新的,我希望它设置为true(如果它是新的,它将在目录中包含“mapQ.cmd”和“add-coid.cmd”文件),如果它既不是旧的也不是新的邮件程序(意思不是邮件程序)然后我希望它为空。

这就是我所拥有的,我想放置一个elseif而不是else,并在其中做一个其他设置空值,意思是上面的非,然后我希望返回布尔值。 在示例中使用了local-build-deploy.cmd,但我希望使用上面的文件名

private boolean isOldMailer(File mailerFolder) {
    File localBuildAndDeploy = new File(mailerFolder,"test/local-build-deploy.cmd");
    if (localBuildAndDeploy.exists()) {
        return true;
    } else {
        return false;
    }
}

4 个答案:

答案 0 :(得分:6)

有两种方法可以做到这一点。

如果您坚持使用布尔值,请使用大写字母B版本而不是小写字母b。 Capital B Boolean是一个对象,可以设置为null并执行您描述的操作。小写b布尔值是基元,不能设置为null。

但是,当设计为2时,有一种更好的方法不依赖于对3个值使用布尔值。

使用枚举,您可以根据需要定义类型,并根据需要提供尽可能多的类型。这是一个例子以及如何使用它。

public enum Status { NEW, OLD, NEITHER }

private Status isOldMailer(File mailerFolder) {
    File localBuildAndDeploy = new File(mailerFolder,"test/local-build-deploy.cmd");
    if (localBuildAndDeploy.exists())
        return Status.NEW;
    else if (/*Something else*/)
        return Status.OLD
    else
        return Status.NEITHER;
}

答案 1 :(得分:1)

这是三元逻辑,而不是二进制逻辑。它通常用于关系数据库。

布尔值是二进制的,当然 - 只是真或假。

如果您需要三元逻辑,请将其包装在您自己的类型中。

答案 2 :(得分:1)

(我将讨论三个常见选项,然后建议第三个选项)。

第一个选项是使用布尔值并将其设置为true,false或null 。这有一些好处:

  1. 假设您首先检查以确保该值不为null,您可以直接在布尔表达式中使用它。
  2. 这是一个有点争议的观点,但是null真的与“没有可能的值”(既不是真也不是假)相差不远,所以这是一个合理的模型。 许多人不同意
  3. 简明。
  4. 然而,有些人,无论合理与否,都期望布尔值为真或假,并且不考虑零可能性,这可能容易导致错误

    第二个选项是使用枚举

    1. 没有真正的误用风险,因为null不是一种选择,但是......
    2. 你失去了布尔语义
    3. 根据您的建模情况,引入自定义枚举可能会或可能不会美学
    4. 第三个 - 推荐 - 选项是使用Optional<来自Google's excellent Guava library的布尔>

      1. 这是一个非常常见的图书馆。
      2. 这是自我记录。
      3. 它有well-defined semantics
      4. Null不是问题。
      5. 布尔语义只是一个 get
      6. 在上面的第一个选项中转换为基于空的模型,从very concise转换为易于阅读。

答案 3 :(得分:-1)

使用Boolean - 基本布尔值上的包装器对象。这样,您可以将引用设置为null或true或false。