当前位置: 代码迷 >> java >> @IntDef注释并返回其他代码中无法注释的值或如何暂时禁止注释影响代码?
  详细解决方案

@IntDef注释并返回其他代码中无法注释的值或如何暂时禁止注释影响代码?

热度:30   发布时间:2023-07-25 19:03:53.0

我在我的代码中使用来自 (但我的问题范围更广,所以请继续阅读:)像这样:

public class UiLockMode
{
    @IntDef({DEFAULT, NONE, VISIBLE, TRANSPARENT})
    @Retention(RetentionPolicy.SOURCE)
    public @interface AllowedValues {}

    public static final int DEFAULT     = 0;
    public static final int NONE        = 1;
    public static final int VISIBLE     = 2;
    public static final int TRANSPARENT = 3;
}

接下来,我得到了一些其他注释方法,如下所示:

protected void setLockMode(@UiLockMode.AllowedValues int lockMode) {
    ...

那时候一切都很好,但每当我想将其他方法的返回值传递给setLockMode() ,问题就出现了,就像来自setLockMode()实现:

private Foo(Parcel in) {
    ...
    setLockMode(in.getInt());

在这种情况下,我的IDE抱怨我只允许使用setLockMode() DEFAULT, NONE, VISIBLE, TRANSPARENT getInt()不是我的方法所以我不能注释它的返回值并使所有这些都快乐。 我也几乎可以肯定这不是唯一的用例,但是我没有找到暂时禁用AllowedValues注释的方法,或者从getInt() “转换”返回值以使AllowedValue不抱怨。

所以我的问题是:有什么方法可以解决这个问题吗? 也许我错过了一些关于注释的明显内容但也许我会创建错误报告以使Google解决此问题?

任何输入或思想赞赏。

您可以通过使用以下方法对方法进行注释来抑制方法的IntDef Lint警告:

@SuppressWarnings("ResourceType")

您还可以为单个语句和整个类禁用这些警告 - 有关更多文档,请参阅 。

如果你只是通过在其上面插入//noinspection ResourceType抑制这个单一语句的警告,这不等于“让它理解getInt()此时返回的值是正确的”?

或者,您可以向UiLockMode添加一个从int转换为@UiLockMode的简单方法,例如:

public @UiLockMode.AllowedValues static int lockModeTranslate(int val)
{
    switch(val)
    {
        case 0: return UiLockMode.DEFAULT;
        case 1: return UiLockMode.NONE;
        case 2: return UiLockMode.TRANSPARENT;
        case 3: return UiLockMode.VISIBLE;
    }

    throw new SomethingHorrible;
}

然后调用像setLockMode(UiLockMode.lockModeTranslate(in.getInt())); 将不再发出警告。