用getter/setter实现嵌套抽象类
我有以下抽象类结构:
public abstract class A {
...
private List<B> b;
public List<B> getB() {
return b;
}
public void setB(List<B> b) {
this.b = b;
}
public static abstract class B {
}
}
并按如下方式实施:
public class AA extends A {
public static class BB extends B {
...
}
当我现在使用jackson在AA上映射Json时,我得到一个错误,它无法创建A$B的实例。我认为这是因为A中的getter/setter仍然引用B而不是BB,这导致了错误。有没有什么方法可以这样做,而不用将getter/setter放在子类中
# 1 楼答案
如果创建
AA
的实例,则需要抽象类B
的实例,然后立即定义要使用的实例。仅仅提供一些实现(BB
)是不够的# 2 楼答案
有几种方法可以反序列化。如果没有注释,Jackson可能会使用最近超类的构造函数,该构造函数有一个没有参数的公共构造函数。创建空对象后,它会使用反射设置场
Objects.requireNotNull
李>使用Jackson的一种更精确的方法是在构造函数中使用
@JsonCreator
和@JsonProperty
,命名所有参数我很不确定这个相当不同寻常的结构。毕竟,你有一个嵌套在抽象类中的抽象类,我见过很多东西,但我没有见过这样的东西。有充分的理由吗?或者将内部类移动到自己的文件中不是问题吗?(毕竟是
public static
)# 3 楼答案
您可以添加类型捕获,以确保b始终正确键入,如下所示:
然后