在继承和杰克逊中使用lombok的@Builder

use*_*376 5 java design-patterns builder-pattern jackson lombok

我正在尝试将lombok的@Builder与继承和Jackson一起使用。

我是从建筑的东西https://reinhard.codes/2015/09/16/lomboks-builder-annotation-and-inheritance/https://gist.github.com/pcarrier/14d3a8e249d804cfbdee建设者遗传模式

这是我所拥有的

UserInput.java

@JsonDeserialize(builder = UserInput.UserInputBuilder.class)
@Builder
@Data
public class UserInput {
    private int userId;
    private UsersChoice usersChoice;
    private ChoiceAttributes choiceAttributes;

    @JsonPOJOBuilder(withPrefix = "")
    public static final class UserInputBuilder {

    }

    public enum UserChoice {
          CHOICE1,
          CHOICE2
    }
}
Run Code Online (Sandbox Code Playgroud)

基于用户的选择,应使用相应的ChoiceAttributes构建器。

ChoiceAttributes.java

public abstract class ChoiceAttributes {
    //nothing to do here
    public static class ChoiceAttributesBuilder {
    }

    public static ChoiceAttributesBuilder getMeMyBuilderBasedOnUserChoice(UserChoice userChoice)
    {
       ChoiceAttributesBuilder choiceAttributesBuilder = null;
       switch(userChoice){
            case CHOICE1:
                choiceAttributesBuilder = new ChoiceAttributesForChoice1.ChoiceAttributesForChoice1Builder(); //err!! stuck?
       }
}
Run Code Online (Sandbox Code Playgroud)

ChoiceAttributesForChoice1.java

@JsonDeserialize(builder = ChoiceAttributesForChoice1.ChoiceAttributesForChoice1Builder.class)
@Builder
@Data
public class ChoiceAttributesForChoice1 extends ChoiceAttributes {
    private int x;
    //and so on

    @JsonPOJOBuilder(withPrefix = "")
    public static class ChoiceAttributesForChoice1Builder extends ChoiceAttributesBuilder {
    }
}
Run Code Online (Sandbox Code Playgroud)

ChoiceAttributesForChoice2.java

@JsonDeserialize(builder = ChoiceAttributesForChoice2.ChoiceAttributesForChoice2Builder.class)
@Builder
@Data
public class ChoiceAttributesForChoice2 extends ChoiceAttributes {
    private float y;
    //and so on

    @JsonPOJOBuilder(withPrefix = "")
    public static class ChoiceAttributesForChoice2Builder extends ChoiceAttributesBuilder {
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?如何使用基于UsersChoice的构建器和ChoiceAttributes构建“ UserInput”?