Лучший способ определить верный, ложный, состояние сброса

Да, если вы используете одно и то же имя пакета и хранилище ключей для выпуска версии 1.1

24
задан Tom Martin 24 November 2008 в 17:11
поделиться

7 ответов

Boolean a = true;
Boolean b = false;
Boolean c = null;

я использовал бы это. Это является самым простым.

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

public enum ThreeState {
    TRUE,
    FALSE,
    TRALSE
};

существует преимущество первого, о котором пользователи Вашего класса не должны заботиться о Вашей булевской переменной с тремя состояниями. Они могут все еще передать true и false. Если Вам не нравится эти null, так как это говорит довольно мало о его значении здесь, можно все еще сделать public static final Boolean tralse = null; в классе.

44
ответ дан 28 November 2019 в 22:20
поделиться

Хотя не определенный для Java, мое собственное предпочтение в этом сценарии должно определить класс ThreeState или перечисление и использовать его - как Вы упомянули, a Правда, Ложь и Неопределенное (или Значение по умолчанию или Сброс, поскольку Ваша проблемно-ориентированная терминология диктует). Это чувствует себя лучше, более естественным и больше самодокументирования, чем представление сброса / неопределенный с null.

10
ответ дан 28 November 2019 в 22:20
поделиться

@Nullable Boolean получает мой голос.

9
ответ дан 28 November 2019 в 22:20
поделиться

Используя пустые указатели для представления состояния чего-то плохой дизайн. Это является неописательным и твердым поддержать. У меня был бы объект состояния с состоянием по умолчанию, если ничто не было явно установлено на нем. Например:

if(state == null) {
    doSomething();
}

Это ничего не говорит мне о том, каково ожидаемое состояние. Что-то больше как это делает его более ясным.

if(state.awaitingSet()) {
    doSomething();
}

Не говоря уже о расширяемом. Что происходит, когда Вам нужно четвертый состояние?

6
ответ дан 28 November 2019 в 22:20
поделиться

Это зависит. Здесь Вы упоминаете, что это было бы сброшено, если это должно наследовать свое значение от родительского значения. У Вас есть некоторая иерархия данных? Что-то вроде этого:

Parent a { 
    boolean val = true;
    boolean val2 = false; 
}
Child b {
    boolean val = false;
    //here val2 should be unset!
}

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

1
ответ дан 28 November 2019 в 22:20
поделиться

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

в Родительском классе

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";
}

, Удостоверяются, что утверждения включены. Утверждения только для цикла разработки и цикла испытаний, они не для исключений на этапе выполнения.

-1
ответ дан 28 November 2019 в 22:20
поделиться

java.lang. Булевская переменная делает это для Вас. Существует статическая булевская переменная констант. ПРАВДА, булевская переменная. Ложь.

частная булевская переменная myBoolean;

должно быть все, в чем Вы нуждаетесь. Отметьте ту булевскую переменную. TRUE пройдет эквивалентный тест, но отличен от "истинного" (который автоупаковывается к TRUE).

-3
ответ дан 28 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: