Android 支持注释“应具有 @Retention(RetentionPolicy.SOURCE)”

Android Support Annotation "should have @Retention(RetentionPolicy.SOURCE)"

提问人:Grisgram 提问时间:6/7/2016 最后编辑:PN10Grisgram 更新时间:5/25/2023 访问量:2973

问:

我正在库中的一些方法中使用 和 注释,我遇到了一个奇怪的警告,我想理解。@Retention@StringDef

在静态类中,我使用以下注释:SIP

public static final String CODEC_SPEEX_16K  = "speex/16000/1";
public static final String CODEC_SPEEX_8K   = "speex/8000/1";
public static final String CODEC_SPEEX_32K  = "speex/32000/1";
public static final String CODEC_ILBC_8K    = "iLBC/8000/1";
public static final String CODEC_GSM_8K     = "GSM/8000/1";
public static final String CODEC_PCMU_8K    = "PCMU/8000/1";
public static final String CODEC_PCMA_8K    = "PCMA/8000/1";
public static final String CODEC_G722_16K   = "G722/16000/1";

@Retention(RetentionPolicy.CLASS)
@StringDef({
    CODEC_SPEEX_16K,
    CODEC_SPEEX_8K,
    CODEC_SPEEX_32K,
    CODEC_ILBC_8K,
    CODEC_GSM_8K,
    CODEC_PCMU_8K,
    CODEC_PCMA_8K,
    CODEC_G722_16K
    })
public @interface CodecName {}

编译良好,没有任何警告。

在静态类中,我使用以下注释:Tools

public static final String RES_TYPE_STRING = "string";
public static final String RES_TYPE_DRAWABLE = "drawable";
public static final String RES_TYPE_LAYOUT = "layout";
public static final String RES_TYPE_VIEW = "id";
public static final String RES_TYPE_DIMEN = "dimen";
public static final String RES_TYPE_COLOR = "color";
public static final String RES_TYPE_ANIM = "anim";
public static final String RES_TYPE_MIPMAP = "mipmap";

@Retention(RetentionPolicy.CLASS)
@StringDef({
    RES_TYPE_STRING,
    RES_TYPE_DRAWABLE,
    RES_TYPE_LAYOUT,
    RES_TYPE_DIMEN,
    RES_TYPE_COLOR,
    RES_TYPE_ANIM,
    RES_TYPE_VIEW,
    RES_TYPE_MIPMAP
})
public @interface ResourceType {
}

我收到警告:

typedef 注解 ....工具箱。Tools.ResourceType 应具有 @Retention(RetentionPolicy.SOURCE)

这似乎不重要,一切正常。 但是有人可以解释一下,为什么

Annotation#1 没有收到警告;

Annotation#2 收到警告;

两者的构建相同,都仅在静态上下文中使用。在我看来,两者都是一样的。

java android 注解

评论


答: 暂无答案