У меня есть StringDef аннотированный интерфейсКак включить поле, аннотированное с @StringDef в Parcelable?
@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
?
Вы не можете записать фактическую строку в 'Parcel'. Вместо этого напишите что-нибудь еще (например, 'int'), которое вы используете, чтобы решить, какую из строк использовать при чтении в' Parcel' (например, через оператор 'switch'). Лично я бы просто жил с «noinspection». Существуют ограничения на изощренность этих видов чеков Lint. – CommonsWare
Именно эта проблема привела меня к осознанию того, что я не получаю от этого большой выгоды, выбрав @StringDef, а не конечную статическую String. Есть ли какая-то конкретная причина, по которой вы решили использовать явно аннотированные строки? –
Казалось, что это хороший способ обеспечить соблюдение только правильных значений, передаваемых в проект библиотеки, без использования перечисления. Я не думаю, что предложение noinspection слишком дорого, но я думал, что будет более чистое решение –