我正在使用Jackson 1.9.x. 坚持动物的例子,这就是我想做的事情:
假设我有一个Animal类:
public class Animal {
private String type;
// accessors
}
public class Mammal extends Animal {
private String diet;
// accessors
}
public class Bird extends Animal {
private boolean tropical;
// accessors
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情(我将一些子类型映射到一个类,然后将一些子类型映射到另一个类):
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Mammal.class, name = "Dog"),
@JsonSubTypes.Type(value = Mammal.class, name = "Cat"),
@JsonSubTypes.Type(value = Bird.class, name = "Dodo"},
@JsonSubTypes.Type(value = Bird.class, name = "Cockatoo"})
public class Animal {
}
Run Code Online (Sandbox Code Playgroud)
我现在看到的是杰克逊只会识别狗对哺乳动物和渡渡鸟对鸟的映射.这是因为StdSubtypeResolver._collectAndResolve()只允许同一个类注册一次(由于NamedType.equals()的实现).
我看到的问题是否有解决方法?
今天,当我准备向应用程序添加新功能时,我遇到了困难。我有数据记录,但我需要一些额外的值。将其添加到记录中是没有意义的,因为在大多数情况下它们不会被使用并且将为空,所以我认为继承,这在这种情况下非常有意义。但是有一个问题,因为Java记录不支持继承,所以我最终将记录重写为带有最终值和getter的丑陋的POJO类。
所以我的问题基本上是 - 为什么没有继承。我知道不存在多重继承,因为它在某些方面很混乱且难以控制,但我们也有无法继承的最终类,为什么我们不能有记录和最终记录?