簡體   English   中英

Java枚舉作為BigInteger值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM