Может ли логическое число быть числом волхвов c - PullRequest
2 голосов
/ 17 марта 2020

Мне интересно, как мне обращаться с логическими значениями в коде.

Допустим, у меня есть класс Human:

   public class Human {

     private final static int NEWBORN = 0;

     private int age;
     private boolean married;

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

     ...
   } 

В этом случае false магическое число c И нужно ли мне создавать константу, как я это делал с возрастом?

Если нет, то есть ли какой-то случай, который я должен обработать с логическими значениями?

1 Ответ

6 голосов
/ 17 марта 2020

Строго говоря, это нормально. false - это самоочевидное значение для boolean с именем married.

. Вы все равно не увидите этого много, потому что многие, многие случаи, которые вы можете наивно моделировать с логическим значением, на самом деле включает в себя гораздо больше, чем просто два состояния.

Например, что если вам нужно по-разному обращаться с неженатыми, разведенными и овдовевшими людьми? Внезапно простой boolean не сможет точно представить данные вашего домена.

Если вы сомневаетесь, вы можете просто ввести enum (скажем, MaritalStatus), даже если он начинается только с два значения. Добавление дополнительных значений перечисления здесь проще, чем полное переключение с логического значения на другой тип.

Другая распространенная причина использования enum заключается в том, что вы можете добавить явное значение UNKNOWN, которое на удивление часто требуется ( и избегает грязного использования null для обозначения «неизвестно»).

...