[英]Java enumeration as BigInteger value
我的應用程序中有Enumeration類,並且正在使用此枚舉來比較BigIntegers的值,如下所示:
if (user.getObjId.equals(RoleEnum.ADMIN.getValue())) {
//something happens
}
問題是,是否可以在不調用getValue()方法的情況下修改此枚舉類以使用它,如以下代碼示例所示?
if (user.getObjId.equals(RoleEnum.ADMIN)) {
//something happens
}
這是我的枚舉類:
public enum RoleEnum {
ADMIN(1), USER(2);
private final BigInteger value;
private RoleEnum(int value) {
this.value = BigInteger.valueOf(value);
}
public BigInteger getValue() {
return value;
}
}
BigInteger背后的想法是,您可以使用很大的數字,只需在IDE上以數字方式鍵入即可。
你應該做:
ADMIN("1"), USER("2");
private RoleEnum(String value) {
this.value = BigInteger.valueOf(value);
您的問題的答案就是“否”。
這完全取決於objectId的equals方法。 你不能覆蓋的枚舉的equals方法,但你可能重寫/聲明equals方法的OBJECTID(很難從你提供的信息說)。
然后,equals方法的實現可以檢查參數類型是否為枚舉類型,並在這種情況下比較這些值。 例如:
public boolean equals(Object o){
if(o instanceof RoleEnum){
return this.value.equals(((RoleEnum)o).getValue());
}
...
}
但是我認為,您的objId是BigInteger類型,因此您不能覆蓋equals方法。 在這種情況下,答案如上所述。
如果某些東西不是很整潔,則可以重構出一種方法,使其看起來再次整潔(尤其是如果它發生在多個地方):
if (user.isRole(RoleEnum.ADMIN))
關於User
(我假設user
類型的名稱):
public boolean isRole(RoleEnum role) {
return getObjId.equals(role.getValue());
}
或者,如果無法修改User
或從那里引用枚舉,則可能是靜態的:
public final class UserHelpers {
private UserHelpers(){}
public static boolean userIsRole(User user, RoleEnum role) {
return user.getObjId.equals(role.getValue());
}
}
用法:
if (UserHelpers.userIsRole(user, RoleEnum.ADMIN))
還是用static
導入的:
if (userIsRole(user, RoleEnum.ADMIN))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.