@ ernest_k решение сделало эту работу, но я думаю, что это не надежное решение.
Вы всегда должны делать код, который независим.
- Потому что его решение жестко закодировано. Что делать, если значения
VALID
& INVALID
изменены. Вы тоже поменяете свою forBoolean
логику?
- Потому что он не проверял, какие поля Enum хранятся внутри него.
Надежным решением будет ответ @DaveyDaveDave. Это также будет работать, если у вас много статусов с VALID & INVAlID.
private enum CardValidationStatus {
VALID(true),
INVALID(false);
//...
public CardValidationStatus forBoolean(boolean isValid) {
for (CardValidationStatus cardValidationStatus : CardValidationStatus.values()) {
if (cardValidationStatus.getValidityStatus() == isValid) {
return cardValidationStatus;
}
}
throw new IllegalArgumentException();
}
}
Предложение (самый простой способ, которым я думаю)
Почему вы делаете Enum только для хранения 2 логических значений?
Просто сделайте статическое логическое имя с именем VALID
& INVALID
.
public static final boolean CARD_STATUS_VALID = true;
public static final boolean CARD_STATUS_INVALID = false;
if(cardStatus == CARD_STATUS_VALID){
// todo
}