在Java构造函数中为布尔值调用方法

在Java构造函数中为布尔值调用方法,java,spring-boot,constructor,jackson,jackson-databind,Java,Spring Boot,Constructor,Jackson,Jackson Databind,我目前正在一个继承的Spring boot应用程序上进行开发,其中一部分是发送一个API POST请求,该请求带有足球比赛是否结束的布尔值(结果)。我注意到班级的设计是这样的: //parent class public class Fixture { private final FixtureType type; private final Team homeTeam; private final Team awayTeam; public Fixture(

我目前正在一个继承的Spring boot应用程序上进行开发,其中一部分是发送一个API POST请求,该请求带有足球比赛是否结束的布尔值(
结果
)。我注意到班级的设计是这样的:

//parent class
public class Fixture {

    private final FixtureType type;
    private final Team homeTeam;
    private final Team awayTeam;

    public Fixture(@JsonProperty("type") final FixtureType type,
                   @JsonProperty("homeTeam") final Team homeTeam,
                   @JsonProperty("awayTeam") final Team awayTeam

    ) {
        this.type = type;
        this.homeTeam = homeTeam;
        this.awayTeam = awayTeam;
    }

    public boolean isResulted() {
        return false;
    } 
    /* 
     other methods
    */
}  
在Swagger文档中,请求指定
“resulted”:true
需要是JSON POST请求中的一个字段。现在我可以将该字段添加到构造函数中,但这意味着更改调用该构造函数的测试和代码的负载。我的解决方案是在构造函数本身中调用
isResulted()
方法。我以前从未这样做过,但这很有效。从长远来看,这种设计是否会产生问题

public class Result extends Fixture {

     private final boolean resulted;

     public Result (){
      super();
      resulted = isResulted();
     }

    @Override
    @JsonProperty("resulted")
    public boolean isResulted() {
        return true;
    }

}



我不明白拥有一个不在任何地方使用的私有字段的目的是什么。我也不确定我是否理解你想要解决的问题

有一种可能的方法更灵活,并且与以前的代码兼容:

public class Result extends Fixture {

     private final boolean resulted;

     public Result (boolean resulted){
      super();
      this.resulted = resulted;
     }

     public Result (){
        this(true); // sets the default value
     }

    @Override
    @JsonProperty("resulted")
    public boolean isResulted() {
        return resulted;
    }

}

嘿,法比奥,谢谢你的回复。我已经添加了实际的构造函数代码以获得更好的上下文。基本上,
isResulted()
方法在应用程序的其他地方被调用,这就是为什么我不愿意更改设计。现在它是有意义的。
public class Result extends Fixture {

     private final boolean resulted;

     public Result (boolean resulted){
      super();
      this.resulted = resulted;
     }

     public Result (){
        this(true); // sets the default value
     }

    @Override
    @JsonProperty("resulted")
    public boolean isResulted() {
        return resulted;
    }

}