这是已发送到服务层的请求
public class UserRequest {
private String id;
private String link;
private String searchText;
}
为“用户响应创建者”创建的类->具有不同的转换
@Component
public class UserResponseCreator {
@Autowired
private UserInfoServiceClient userInfoServiceClient;
public List<UserResponse> getUserResponse() {
//transformation one
}
public List<UserResponse> getUserResponse(UserRequest request) {
//transformation two
}
}
服务类别:
@Service
public class UserService {
@Autowired
private UserResponseCreator UserResponseCreator;
public List<UserResponse> sendEntries(UserRequest request) {
String node = request.getnode();
String link = request.getLinkedTo();
String searchText = request.getSearchText();
List<UserResponse> UserResponses = new ArrayList<>();
if ( node == null && link == null && searchText == null ) {
UserResponses = UserResponseCreator.getUserResponse();
} else if (node != null && link != null) {
UserResponses = UserResponseCreator.getUserResponse(request);
} else if (searchText!=null) {
UserResponses = UserResponseCreator.getUserResponse();
} else {
throw new InvalidRequestBodyException("Please check the request body");
}
return UserResponses;
}
}
现在我有以下问题:
如何避免多次if和重复的null检查
必须使用命令模式并创建方法来传递参数,检查空值
对于null检查,我准备了一种方法:
public boolean checkFieldsIsNull(Object... varArgs) {
return Stream.of(varArgs)
.allMatch(Objects::isNull);
}
最佳答案
首先,您根本没有在问题中使用嵌套的if
。您没有的嵌套if
具有以下结构(即if
中的if
):
if (condition1)
{
// Executes when condition1 is true
if (condition2)
{
// Executes when condition2 is true
}
}
如果您打算摆脱多个if,则可以使用三元运算符,但是您的代码看起来很笨拙。 if ... else的另一种选择是switch ... case,但它不适合您的问题。如果您有兴趣探索更多内容,可以在baeldung.com/java-replace-if-statements上查看其他选择。
第二件事是关于重复的
null
检查,您无法避免,因为这是您逻辑的一部分。
关于java - 设计模式(命令模式),以避免出现多个if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58418038/