相关疑难解决方法(0)

Jackson多态性:如何将多个子类型映射到同一个类

我正在使用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 json jackson

10
推荐指数
3
解决办法
1万
查看次数

为什么Java记录不支持继承?

今天,当我准备向应用程序添加新功能时,我遇到了困难。我有数据记录,但我需要一些额外的值。将其添加到记录中是没有意义的,因为在大多数情况下它们不会被使用并且将为空,所以我认为继承,这在这种情况下非常有意义。但是有一个问题,因为Java记录不支持继承,所以我最终将记录重写为带有最终值和getter的丑陋的POJO类。

所以我的问题基本上是 - 为什么没有继承。我知道不存在多重继承,因为它在某些方面很混乱且难以控制,但我们也有无法继承的最终类,为什么我们不能有记录和最终记录?

java inheritance record

8
推荐指数
1
解决办法
5120
查看次数

标签 统计

java ×2

inheritance ×1

jackson ×1

json ×1

record ×1