我有一个StringDef带注释的接口
@StringDef({
SpecialString.A,
SpecialString.B
})
@Retention(RetentionPolicy.SOURCE)
public @interface SpecialString {
String B = "BBB";
String A = "AAA";
}
我在parcelable对象中的字段上使用
public class MyParcelable implements Parcelable {
private final @SpecialString String mType;
protected MyParcelable (Parcel in) {
//Android studio shows an error for this line declaring
//"Must be one of SpecialString.A, SpecialString.B"
mType = in.readString();
}
...
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mType);
}
}
如何处理由@StringDef
注释的字符串,而无需使用//noinspection WrongConstant
进行抑制?
答案 0 :(得分:0)
Parcelable支持StringDef字段,但目前无法确保读回的值是可接受的值之一。
通过添加评论noinspection WrongConstant
更安全的替代方法可能是使用枚举并使用MyEnum.valueOf(readString)
或CommonsWare建议读取它,以编写int序数或常量而不是字符串,并在读取值时进行查找。