我有一个值为VALID
和INVALID
的枚举,它们具有与之关联的布尔属性。我想根据我提供的布尔值获取枚举值。
如果是true
,我应该得到VALID
,如果是false
,我应该得到INVALID
。我想根据成员变量的值,使用以下类似的getter方法进行操作
public boolean getCardValidityStatus() {
return CardValidationStatus status = CardValidationStatus(this.mCardValidityStatus));
}
我的代码:
private enum CardValidationStatus {
VALID(true),
INVALID(false);
private boolean isValid;
CardValidationStatus(boolean isValid) {
this.isValid = isValid;
}
public boolean getValidityStatus() {
return this.isValid;
}
}
答案 0 :(得分:6)
您可以使用枚举本身中的静态查找方法来实现这一目标:
private enum CardValidationStatus {
VALID(true),
INVALID(false);
//...
public static CardValidationStatus forBoolean(boolean status) {
//this is simplistic given that it's a boolean-based lookup
//but it can get complex, such as using a loop...
return status ? VALID : INVALID;
}
}
可以使用以下方法检索相应的状态:
public CardValidationStatus getCardValidityStatus() {
return CardValidationStatus.forBoolean(this.mCardValidityStatus));
}
答案 1 :(得分:1)
我会向您的枚举中添加一种parse
方法,该方法采用boolean
,对所有值进行迭代并返回与之匹配的值,例如:
public CardValidationStatus parse(boolean isValid) {
for (CardValidationStatus cardValidationStatus : CardValidationStatus.values()) {
if (cardValidationStatus.getValidityStatus() == isValid) {
return cardValidationStatus;
}
}
throw new IllegalArgumentException();
}
答案 2 :(得分:-1)
您应该始终编写独立的代码。
VALID
和INVALID
的值该怎么办。您还会更改forBoolean
逻辑吗?可靠的解决方案将是@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
}