在Java构造函数中为布尔值调用方法
我目前正在一个继承的Spring boot应用程序上进行开发,其中一部分是发送一个API POST请求,该请求带有足球比赛是否结束的布尔值(在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(
结果
)。我注意到班级的设计是这样的:
//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;
}
}