Parceler 使用继承泛型
Parceler use inheriting generic type
我正在努力寻找一种在特定情况下使用 parceler 库的方法。
具有泛型类型的抽象 class,像这样
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;
}
}
还有另一个 class 我们将用作选项(我们将序列化)...
@Parcel(Parcel.Serialization.BEAN)
public class MyOptions {
private boolean option1;
public boolean getOption1() {
return option1;
}
public void setOption1(boolean option1) {
this.option1 = option1;
}
}
我们要序列化的第三个 class 称为 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 will error if the generic parameter is not mapped.",但在这种情况下,我只对序列化 ChildClass 感兴趣,同时保留 ParentClass 的属性(即 id 和 class 我的选项)。有没有可能让它成为可能?尝试遵循一些建议 here 但没有成功。
不是最佳选择,但您可以通过重写基础 class 中的 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);
}
}
我想我们可以确定这个隐含类型,但目前这是最接近的解决方案。
我正在努力寻找一种在特定情况下使用 parceler 库的方法。
具有泛型类型的抽象 class,像这样
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;
}
}
还有另一个 class 我们将用作选项(我们将序列化)...
@Parcel(Parcel.Serialization.BEAN)
public class MyOptions {
private boolean option1;
public boolean getOption1() {
return option1;
}
public void setOption1(boolean option1) {
this.option1 = option1;
}
}
我们要序列化的第三个 class 称为 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 will error if the generic parameter is not mapped.",但在这种情况下,我只对序列化 ChildClass 感兴趣,同时保留 ParentClass 的属性(即 id 和 class 我的选项)。有没有可能让它成为可能?尝试遵循一些建议 here 但没有成功。
不是最佳选择,但您可以通过重写基础 class 中的 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);
}
}
我想我们可以确定这个隐含类型,但目前这是最接近的解决方案。