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”?
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |