如何在 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 并在读取值时进行查找。