如何在 Parcelable 中包含一个用 @StringDef 注释的字段?
How can I include a field annotated with @StringDef in a Parcelable?
我有一个 StringDef 注释接口
@StringDef({
SpecialString.A,
SpecialString.B
})
@Retention(RetentionPolicy.SOURCE)
public @interface SpecialString {
String B = "BBB";
String A = "AAA";
}
我在可打包对象的字段上使用的
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
进行压缩?
Parcelable 支持 StringDef 字段,但目前无法确保读回的值是可接受的值之一。
通过添加注释 noinspection WrongConstant
,可以在 Android Studio 中安全地忽略该方法
更安全的替代方法可能是使用枚举并使用 MyEnum.valueOf(readString)
读取它,或者按照 CommonsWare 的建议,编写一个 int 序号或常量而不是 String 并在读取值时进行查找。
我有一个 StringDef 注释接口
@StringDef({
SpecialString.A,
SpecialString.B
})
@Retention(RetentionPolicy.SOURCE)
public @interface SpecialString {
String B = "BBB";
String A = "AAA";
}
我在可打包对象的字段上使用的
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
进行压缩?
Parcelable 支持 StringDef 字段,但目前无法确保读回的值是可接受的值之一。
通过添加注释 noinspection WrongConstant
更安全的替代方法可能是使用枚举并使用 MyEnum.valueOf(readString)
读取它,或者按照 CommonsWare 的建议,编写一个 int 序号或常量而不是 String 并在读取值时进行查找。