我正在尝试重构一些与下面的代码类似的代码。我觉得应该有一种更简单的方法来完成它的工作。我主要关心的是 (!dataA.isEmpty()) 条件的 if 和 else block 中对 getDataB() 的调用。
DataA dataA = getDataA();
if (!dataA.isEmpty()) {
if (dataA.getStatus() == Status.FINAL) {
// process finalized dataA
}
if (dataA.getStatus() == Status.RECEIVED) {
DataB dataB = getDataB();
if (!dataB.isEmpty()) {
dataA.setStatus(dataB.getStatus());
// process dataA with updated status from dataB
}
}
if (dataA.getStatus() == STATUS.IN_PROGRESS) {
// process in progress dataA
}
// empty dataA
} else {
Datab dataB = getDataB();
if (!dataB.isEmpty()) {
// process dataB
}
}
最佳答案
仍有改进的空间,但作为初始重构,您可以执行以下操作:
// I like to get rid of the negations, assuming that DataA and DataB are your objects.
// I would normally declare a method with more meaning, like hasData(), otherwise just use the negation and the isEmpty.
DataA dataA = getDataA();
DataB dataB = getDataB();
// When DataA has data
if (dataA.hasData()) {
Status statusA = dataA.getStatus();
switch(statusA) {
case Status.FINAL:
// process finalized dataA
break;
case Status.RECEIVED:
if (dataB.hasData()) {
dataA.setStatus(dataB.getStatus());
// process dataA with updated status from dataB
}
break; // If you want to process dataA in progress after setting the dataB status in A, then remove this break.
case Status.IN_PROGRESS:
// process in progress dataA
break;
}
// When DataB has data
} else if (dataB.hasData()) {
// process dataB
}
关于java - 重构嵌套的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699161/