在我的Result类中,我用newInstance()方法中的@IntDef第一个整数参数注释,如下所示:

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
}
但是棉绒由于安全性错误而使构建失败

我知道可以简单地抑制此错误。但是我想知道代码有什么问题吗?也许这是另一个问题?

最佳答案

我对@StringDef常数也有类似的问题。我猜这个特殊的Lint支票有一些问题。

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

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

编辑:此问题似乎已通过gradle插件版本1.4.0-beta1修复。
Issue 182179 - android - Lint gives erroneous @StringDef errors in androidTests

07-24 09:47
查看更多