Парсер использует наследование универсального типа
Я изо всех сил пытаюсь найти способ использовать библиотеку посылок в конкретном случае.
Наличие абстрактного класса с родовыми типами, как это
public abstract class ParentClass<O> {
private String id;
private O options;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public O getOptions() {
return options;
}
public void setOptions(O options) {
this.options = options;
}
}
И еще один класс, который мы будем использовать в качестве параметров (который мы будем сериализовать)...
@Parcel(Parcel.Serialization.BEAN)
public class MyOptions {
private boolean option1;
public boolean getOption1() {
return option1;
}
public void setOption1(boolean option1) {
this.option1 = option1;
}
}
И третий класс, который мы хотим сериализовать, называется ChildClass
@Parcel(Parcel.Serialization.BEAN)
public class ChildClass extends ParentClass<MyOptions>{}
Несмотря на то, что я не сериализую ParentClass, а просто ChildClass, я получаю ошибку компилятора при попытке построить проект
Parceler: Unable to find read/write generator for type java.lang.Object for ParentClass#options
public void setOptions(O options) {
Мне известно, что в документации говорится, что "Parcel выдаст ошибку, если универсальный параметр не сопоставлен", но в этом случае меня интересует только сериализация ChildClass при сохранении атрибутов из ParentClass (то есть id и экземпляр класса. MyOptions). Есть ли возможность сделать это возможным? Пытался следовать некоторым советам здесь, но безуспешно.
1 ответ
Не лучший вариант, но вы можете обойти эту проблему, переопределив getOptions()
а также setOptions()
методы в вашем базовом классе. Это определяет тип для Parceler:
@Parcel(Parcel.Serialization.BEAN)
public class ChildClass extends ParentClass<MyOptions>{
@Override
public MyOptions getOptions() {
return super.getOptions();
}
@Override
public void setOptions(MyOptions options) {
super.setOptions(options);
}
}
Я предполагаю, что мы могли бы определить этот подразумеваемый тип, но пока это самое близкое решение.