Java枚举为BigInteger值

时间:2016-04-21 11:16:52

标签: java enums comparison enumeration biginteger

我的应用程序中有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;
    }
}

3 个答案:

答案 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))