代码检查工具在安全错误“WrongConstant: Incorrect constant”时导致构建失败。IntDef注释。

6

在我的Result类中,我使用@IntDef 注解了 newInstance() 方法的第一个整数参数,像这样:

public class Result {
    public static final int SUCCESS = 0;
    public static final int FAIL = 1;
    public static final int UNKNOWN = 2;

    // ...

    private Result(@Status int status, Uri uri) {
        mStatus = status;
        mUri = uri;
    }

    public static Result newInstance(@Status int status, Uri uri) {
        return new Result(status, uri);
    }

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({ SUCCESS, FAIL, UNKNOWN })
    @interface Status {}
}

接下来,在我的Utils类中,我调用了该方法并传递正确的常量作为参数。我确保使用特定的一组常量,如下所示:
public static Result foo() {
    // ...
    return Result.newInstance(Result.SUCCESS, contentUri); // line 45
}

但是lint在安全错误方面构建失败了

"WrongConstant: 不正确的常量"

../../src/main/java/my/package/Utils.java:45: 必须为0、1、2之一

我知道可以简单地禁止此错误。但我想知道我的代码哪里出了问题?或者可能是其他问题吗?


非常奇怪,我甚至找不到这样的lint警告定义。 - Stas Parshin
2个回答

6

我曾遇到一个类似的问题,与@StringDef常量有关。我猜这个特定的Lint检查存在一些问题。

同时,你可以使用@SuppressLint注解作为解决方法:

public static Result foo() {
    // ...
    @SuppressLint("WrongConstant")
    return Result.newInstance(Result.SUCCESS, contentUri);
}

编辑:这个问题似乎已经在gradle插件版本1.4.0-beta1中得到解决。
问题182179 - android - Lint在androidTests中给出了错误的@StringDef错误


-1

就像错误提示所说,该值必须为0、1或2。

Result.SUCCESS的值为-1


1
不,Result.SUCCESS 是我自己类中声明的常量。它肯定等于0。你贴出的链接是 Activity.RESULT_OK,超出了范围。 - dmitriyzaitsev
你确定没有使用不同的Result的导入吗? - ci_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接