Я ищу лучший способ реализации трехзначной логики.Лучший способ использования трехзначных логических переменных
Я гугле и нашел три различных подхода:
Используйте
null
значение дляBoolean
переменной как неопределеннуюЭтот вариант выглядит опасным для меня, потому что это может неожиданно вызвать
NullPointerException
Использование
Optional<Boolean>
типЭтот вариант все же немного опасен. Чтобы избежать
NoSuchElementException
следует использовать конструкции, как это:Optional<Boolean> amIRight = Optional.empty(); if (Optional.of(true).equals(amIRight) { doSome(); }
Это выглядит слишком многословным для меня
Реализовать свой собственный перечисление
Последний вариант кажется лучшим. Почти безопасно, очень просто в неподтвержденном состоянии. Но я не нашел ни одного из таких перечислений в широко распространенных джавахских лириках, таких как Apache, Google Guava и т. Д. Мне кажется странным, что все избегают более простой и безопасной реализации.
Может быть, я пропустил что-то, и есть серьезные причины не применять трехзначное логическое перечисление.
Перейти с перечислением. – shmosel
1. enums все еще может быть «null», поэтому он не отличается от использования 'Boolean', 2. для' Optional' использование 'someOptional.orElse (false)' короче и легче читать, чем ваш текущее «решение». –
@MarkRotteveel Null - не главное. Дело в том, что булевы не должны быть [tri-state] (http://thedailywtf.com/articles/What_Is_Truth_0x3f_). – shmosel