Да, если вы используете одно и то же имя пакета и хранилище ключей для выпуска версии 1.1
Boolean a = true;
Boolean b = false;
Boolean c = null;
я использовал бы это. Это является самым простым.
Иначе должен использовать перечисление. Возможно, это еще лучше и быстрее, так как никакая упаковка не требуется:
public enum ThreeState {
TRUE,
FALSE,
TRALSE
};
существует преимущество первого, о котором пользователи Вашего класса не должны заботиться о Вашей булевской переменной с тремя состояниями. Они могут все еще передать true
и false
. Если Вам не нравится эти null
, так как это говорит довольно мало о его значении здесь, можно все еще сделать public static final Boolean tralse = null;
в классе.
Хотя не определенный для Java, мое собственное предпочтение в этом сценарии должно определить класс ThreeState или перечисление и использовать его - как Вы упомянули, a Правда, Ложь и Неопределенное (или Значение по умолчанию или Сброс, поскольку Ваша проблемно-ориентированная терминология диктует). Это чувствует себя лучше, более естественным и больше самодокументирования, чем представление сброса / неопределенный с null
.
Используя пустые указатели для представления состояния чего-то плохой дизайн. Это является неописательным и твердым поддержать. У меня был бы объект состояния с состоянием по умолчанию, если ничто не было явно установлено на нем. Например:
if(state == null) {
doSomething();
}
Это ничего не говорит мне о том, каково ожидаемое состояние. Что-то больше как это делает его более ясным.
if(state.awaitingSet()) {
doSomething();
}
Не говоря уже о расширяемом. Что происходит, когда Вам нужно четвертый состояние?
Это зависит. Здесь Вы упоминаете, что это было бы сброшено, если это должно наследовать свое значение от родительского значения. У Вас есть некоторая иерархия данных? Что-то вроде этого:
Parent a {
boolean val = true;
boolean val2 = false;
}
Child b {
boolean val = false;
//here val2 should be unset!
}
В этом случае, если бы это возможно, я сказал бы, просто не включают val2 в Ребенка и имеют Вашу логику поиска быть таким, что, если это не находит переменную, это ищет родителей значение.
В новичке Родительского класса булевская переменная к пустому указателю и в дочернем классе создает метод для проверки, чтобы видеть, была ли булевская переменная установлена
в Родительском классе
private Boolean a = null;
public void setA(Boolean a) {
this.a = a;
}
public Boolean getA() {
return a;
}
В Дочернем классе
if (a == true)
{
dothis;
}
else if (a == false)
{
dothat;
}
else
{
assert false : "Boolean a has not been set";
}
, Удостоверяются, что утверждения включены. Утверждения только для цикла разработки и цикла испытаний, они не для исключений на этапе выполнения.
java.lang. Булевская переменная делает это для Вас. Существует статическая булевская переменная констант. ПРАВДА, булевская переменная. Ложь.
частная булевская переменная myBoolean;
должно быть все, в чем Вы нуждаетесь. Отметьте ту булевскую переменную. TRUE пройдет эквивалентный тест, но отличен от "истинного" (который автоупаковывается к TRUE).