0
は私がStringDef注釈付きインタフェース@StringDefで注釈を付けたフィールドをParcelableに含めるにはどうしたらいいですか?
私はparcelableオブジェクトのフィールドに使用@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);
}
}
にはどうすれば//noinspection WrongConstant
で抑制に頼ることなく@StringDef
による注釈付き文字列を個別の処理することができますか?
実際の文字列を 'Parcel'に書き込むことができませんでした。代わりに、 'Parcel'で読み込むときにどの文字列を使うか(例えば、' switch'ステートメントを介して)を決めるのに使う他のもの(例えば 'int')を書いてください。個人的には、私はちょうど 'noinspection'で生きています。これらの種類のリントチェックの洗練には限界があります。 – CommonsWare
最終的な静的Stringではなく@StringDefを使用することを選択することで、それほど利益をあげていないことに気づいたのと同じ問題でした。明示的に注釈付きの文字列を使用する理由は何ですか? –
列挙型を使わずに、正しい値だけをライブラリプロジェクトに渡すようにするのは良い方法のようです。私はnoinspection節はあまりにも多くのコストだとは思わないが、よりクリーンな解決策があると思った –