我正在为库中的一些方法使用@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注释…. toolbox.Tools.ResourceType应该有@Retention(RetentionPolicy.SOURCE)
这似乎是不加批判的,一切正常。 但有人可以解释我,为什么
注释#1没有得到警告;
注释#2收到警告;
两者都是相同的,都只在静态环境中使用。 从我的观点来看,两者都是一样的。