【发布时间】:2026-02-02 15:35:01
【问题描述】:
我的同事向我展示了这段代码,我们都想知道为什么我们似乎无法删除重复的代码。
private List<Foo> parseResponse(Response<ByteString> response) {
if (response.status().code() != Status.OK.code() || !response.payload().isPresent()) {
if (response.status().code() != Status.NOT_FOUND.code() || !response.payload().isPresent()) {
LOG.error("Cannot fetch recently played, got status code {}", response.status());
}
return Lists.newArrayList();
}
// ...
// ...
// ...
doSomeLogic();
// ...
// ...
// ...
return someOtherList;
}
这是另一种表示形式,以使其不那么冗长:
private void f() {
if (S != 200 || !P) {
if (S != 404 || !P) {
Log();
}
return;
}
// ...
// ...
// ...
doSomeLogic();
// ...
// ...
// ...
return;
}
有没有更简单的方法来写这个,而不重复!P?如果不是,是否有一些关于情况或条件的独特属性使得无法分解!P?
【问题讨论】:
-
我不这么认为,纯粹是因为您要返回然后登录 sub if 语句。
-
虽然它不一定会使它更简单,但您可以在其他操作之前检查 !P,这将使代码在 P 不存在的情况下更有效,因为其他操作不会需要检查。
-
如果您不想在
S不是 200 而是 404 时登录,这似乎是一种更短的方法。如果您希望两者都执行相同的操作,您会执行(S != 200 && S != 404) || !P,但事实并非如此 -
我完全希望分支不存在有效负载来记录不同的错误消息。
-
啊,让我澄清一下。我关心的不是代码长度。直觉上,感觉就像我们错过了什么,看到
!P在两个地方重复。
标签: java if-statement logic refactoring boolean-logic