首页 > 解决方案 > 布尔值可以是幻数吗

问题描述

我想知道如何处理代码中的布尔值。

假设我有一Human堂课:

   public class Human {

     private final static int NEWBORN = 0;

     private int age;
     private boolean married;

     public Human() {
       age = NEWBORN;
       married = false;
     }

     ...
   } 

在这种情况下是false一个神奇的数字吗?我应该像年龄一样创建一个常数吗?

如果没有,是否有任何情况我必须处理布尔值?

标签: javabooleancoding-style

解决方案


严格来说,这种用法很好。对于命名的 .false是一个完全不言自明的值。booleanmarried

您仍然不会看到很多,因为您可能天真地用布尔值建模的许多情况实际上涉及的不仅仅是两个状态。

例如,如果您需要以不同的方式处理未婚、离异和丧偶的人怎么办?突然一个简单的boolean将无法准确地表示您的域数据。

如有疑问,您可以只引入一个enum(比如说MaritalStatus),即使它开始时只有两个值。在此处添加额外的枚举值比完全从布尔值更改为不同的类型更容易。

使用 an 的另一个常见原因enum是您可以添加一个UNKNOWN经常需要的显式值(并避免讨厌使用null来表示“未知”)。


推荐阅读