为什么android studio告诉我enum.valueOf总是如此?

时间:2016-11-11 09:19:04

标签: java android android-studio enums null

我有一个奇怪的问题。这是我的枚举:

enum ErrorInByte{
    ERROR_BIT0(3),
    ERROR_BIT2(4),
    ERROR_BIT3(5),
    ERROR_BIT4(7),
    ERROR_BIT5(13),
    ERROR_BIT7(15),

    private int value;
    ErrorInByte(int value) {
        this.value = value;
    }

    public static ErrorInByte valueOf(int value){
        return intToErrorInByte.get(value);
    }

    private static final Map<Integer, ErrorInByte> intToErrorInByte= new HashMap<>();
    static {
        for (ErrorInByte type : ErrorInByte.values()) {
            intToErrorInByte.put(type.value, type);
        }
    }
}

在我班上我有一个if:

int n;
//Code that changes n to a value
if(n > 0 && ErrorInByte.valueOf(n) != null){
//do stuff...
}

为什么android studio告诉我ErrorInByte.valueOf(n)总是如此?我测试了它,而ErrorInByte.valueOf(326)它等于null。

警告讯息:

This inspection analyzes method control and data flow to report possible conditions that are always true or false, expressions whose value is statically proven to be constant, and situations that can lead to nullability contract violations.


Variables, method parameters and return values marked as @Nullable or @NotNull are treated as nullable (or not-null, respectively) and used during the analysis to check nullability contracts, e.g. report possible NullPointerException errors.

More complex contracts can be defined using @Contract annotation, for example:

@Contract("_, null -> null") — method returns null if its second argument is null 
@Contract("_, null -> null; _, !null -> !null") — method returns null if its second argument is null and not-null otherwise 
@Contract("true -> fail") — a typical assertFalse method which throws an exception if true is passed to it 

The inspection can be configured to use custom @Nullable
    @NotNull annotations (by default the ones from annotations.jar will be used)

有没有办法删除警告?我讨厌警告......

1 个答案:

答案 0 :(得分:1)

Enums已经有一个不可覆盖的valueOf方法。这意味着您实际上正在调用自己定义的valueOf,但IDE假定它是静态valueOf。因此,为了解决您的问题,您必须将方法重命名为

 public static ErrorInByte lookUpByCode(int value){
        return intToErrorInByte.get(value);
    }