我的应用程序中有Enumeration类,我使用这些枚举来比较BigIntegers的值,如下所示:
if (user.getObjId.equals(RoleEnum.ADMIN.getValue())) {
//something happens
}
问题是,如果不调用 getValue()方法,我是否可以修改此枚举类以使用它,如下面的代码示例所示?
if (user.getObjId.equals(RoleEnum.ADMIN)) {
//something happens
}
这是我的Enumeration类:
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;
}
}
答案 0 :(得分:1)
BigInteger背后的想法是,您可以处理如此大的数字,您只需在IDE上以数字方式键入...
你应该这样做:
ADMIN("1"), USER("2");
private RoleEnum(String value) {
this.value = BigInteger.valueOf(value);
答案 1 :(得分:1)
您的问题的答案很简单,没有'
这一切都取决于objectId的equals方法。你不能覆盖枚举的equals方法,但你可以可能覆盖/声明objectId上的equals方法(很难说你提供的信息)。
然后,equals方法的实现可以检查枚举类型的参数类型,在这种情况下,比较这些值。例如:
public boolean equals(Object o){
if(o instanceof RoleEnum){
return this.value.equals(((RoleEnum)o).getValue());
}
...
}
但我认为,你的objId是BigInteger类型,所以你不能覆盖equals方法。在这种情况下,答案如上所述:'否'
答案 2 :(得分:1)
如果某些东西不是很整齐,那么重构一个方法,使其看起来又整洁(特别是如果它发生在多个地方):
if (user.isRole(RoleEnum.ADMIN))
on 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))