我遇到了一個問題,我的代碼感覺很混亂,我需要一些幫助來更好地構建它。
例子:
if (object.getDescription() == Status.Expected && !logEvent.equals("Expected")) {
System.out.println("Do nothing"); // ???
} else {
status.setChangedBy(logEvent);
}
如果以更清潔的方式,我該如何格式化?我希望changedBy在任何情況下都呼叫該方法,除了 whengetDescription == Status.Expected和logEventis not "Expected"。但我也不想要一個空的 if 陳述句。
另一種選擇是:
if (object.getDescription() == Status.Expected) {
if (logEvent.equals("Expected")) {
status.setChangedBy(logEvent);
}
} else {
status.setChangedBy(logEvent);
}
這兩個例子都有效。但是這兩個例子都“感覺不對”。還有其他我沒有看到的解決方案嗎?
uj5u.com熱心網友回復:
通過將!運算子應用于整個事物來反轉條件。然后您可以將代碼放在if塊中而不是else塊中。
if (!(object.getDescription() == Status.Expected && !logEvent.equals("Expected"))) {
status.setChangedBy(logEvent);
}
您可以使用德摩根定律進一步簡化這一點:
if (object.getDescription() != Status.Expected || logEvent.equals("Expected")) {
status.setChangedBy(logEvent);
}
當“描述不是預期的或 logEvent預期的”時更改狀態
uj5u.com熱心網友回復:
如果我理解正確,您正在尋找的是:
if (object.getDescription() != Status.Expected || logEvent.equals("Expected")) {
status.setChangedBy(logEvent);
}
我拿了你原來的比較并把它顛倒過來。
uj5u.com熱心網友回復:
我知道這需要更多代碼,但我會采用這種方法:
if (shouldChangeStatus(object, logEvent))
status.setChangedBy(logEvent);
}
private boolean shouldChangeStatus(Object object, Object logEvent) {
if (object.getDescription() != Status.Expected) {
return true;
}
if (logEvent.equals("Expected")) {
return true;
}
return false;
}
您可以將其簡化為類似的東西
if (shouldChangeStatus(object, logEvent))
status.setChangedBy(logEvent);
}
private boolean shouldChangeStatus(Object object, Object logEvent) {
if (object.getDescription() != Status.Expected) {
return true;
}
return logEvent.equals("Expected");
}
這是維護該代碼的最簡單方法,如果您需要在其他地方進行檢查,您可以將私有更改為公共/受保護或其他任何內容,只需使用它而無需復制粘貼代碼
uj5u.com熱心網友回復:
對先前答案的小補充:在這樣的比較中將常量字串放在首位是一種很好的做法"Expected".equals(logEvent)。這樣,如果 logEvent 為 null,則不會拋出 NPE。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527308.html
上一篇:宣告陣列值時使用if陳述句
