Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson进行合成而不是继承_Java_Json_Inheritance_Jackson_Composition - Fatal编程技术网

Java 使用Jackson进行合成而不是继承

Java 使用Jackson进行合成而不是继承,java,json,inheritance,jackson,composition,Java,Json,Inheritance,Jackson,Composition,我试图使用Jackson来为我管理类型,但是我不想使用继承来创建类型,我想使用合成,并有一组工厂方法和一些注释来指导Jackson这些类型是什么。具体例子: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") public interface MyInterface { void doStuff(); // Factories @JsonCreator @JsonSubTypes.Type(

我试图使用Jackson来为我管理类型,但是我不想使用继承来创建类型,我想使用合成,并有一组工厂方法和一些注释来指导Jackson这些类型是什么。具体例子:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
public interface MyInterface {
    void doStuff();

    // Factories

    @JsonCreator
    @JsonSubTypes.Type(value = MyInterface.class, name = "impl1")
    static MyInterface impl1() {
        return new MyInterfaceWithComposition(() -> System.out.println("Impl1"));
    }

    @JsonCreator
    @JsonSubTypes.Type(value = MyInterface.class, name = "impl2")
    static MyInterface impl2() {
        return new MyInterfaceWithComposition(() -> System.out.println("Impl2"));
    }
}

public class MyInterfaceWithComposition implements MyInterface {
    private final Runnable task;

    public MyInterfaceWithComposition(Runnable task) {
        this.task = task;
    }

    @Override
    public void doStuff() {
        task.run();
    }
}
我知道我可以创建自定义序列化器/反序列化器,但我希望有一种方法可以避免它,让Jackson完成所有工作

我觉得做这件事不应该这么难。我是否错过了一些杰克逊的技巧/注释?谢谢你的帮助