如何在Parcelable中包含用@StringDef注释的字段?

时间:2017-02-16 13:22:04

标签: android parcelable

我有一个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进行抑制?

1 个答案:

答案 0 :(得分:0)

Parcelable支持StringDef字段,但目前无法确保读回的值是可接受的值之一。

通过添加评论noinspection WrongConstant

,可以在Android Studio中安全地忽略该方法

更安全的替代方法可能是使用枚举并使用MyEnum.valueOf(readString)或CommonsWare建议读取它,以编写int序数或常量而不是字符串,并在读取值时进行查找。