[英]How to Effect a Return Value from Void Method
這是我的代碼:
deleteStuffFromDb(); // void method
deleteStuffFromCache();
deleteStuffFromDb()是具有返回類型void
的接口方法。
理想情況下,第一種方法將返回一個值(成功/失敗)。 此返回值將確定第二種方法是否執行。
我可以修改接口,因為它被2個類調用。 但是,仍然存在這樣的風險,作為一個沒有完整了解系統的運維開發人員,我可能會破壞一些東西。
您如何建議我確定此void deleteStuffFromDb()的執行是否確定deleteStuffFromCache()的執行。
我想過一些方法:
請給我您的想法和選擇的理由。
謝謝。
我可以修改接口,因為它被2個類調用。 但是,作為運維開發人員,如果沒有完整的系統說明,仍然存在風險
如果系統的整體情況是僅在兩個地方使用,則一定要同時更改它們。 全面的重新編譯和系統測試將揭示是否有其他損壞。
將deleteStuffFromDb()
的簽名重寫為deleteStuffFromDb(Object returnObject)
然后編寫一個包裝器接口以替換舊的簽名deleteStuffFromDb()
在包裝器界面中,執行以下操作:
void deleteStuffFromDb() {
// initialize some dummy returnObject that doesnt get used
deleteStuffFromDb(dummyObject);
}
要使用此系統, returnObject
傳遞到接口以捕獲返回值。
這樣,您可以根據需要選擇從接口獲取返回值,但又不會中斷使用舊接口的現有調用。
我認為將返回類型從void更改為其他內容不會破壞任何現有代碼。
如果返回類型為void,則正在使用它的任何代碼都不會期望該方法返回任何值。 如果這樣做的話,它也會中斷。
現在,如果您更改它並從方法中返回一些值,那么在現有代碼的情況下,返回的值將被忽略。
您不能在需要該方法返回某些值的地方使用void方法,但可以相反。
我能想到的唯一情況就是更改它可能是一個問題,如果該接口有很多實現。
至於第二點,我寧願保持邏輯所屬。 可能只是調用方法本身。
不確定這對您的聲音有多好,但是我已經看到了一些方法(例如,基於失敗原因, Scanner.html#next()
拋出NoSuchElementException
和IllegalStateException
。還有更多這樣的示例),這些方法是為了成功在其中拋出異常失敗的情況,例如
public void deleteStuffFromDb(){
..... usual code..
if (failedCondition){
throw new RuntimeErrorException(new Error("Couldn't delete"));
}
}
在調用方,如果得到拋出的異常,則可以假設這是失敗,否則就是成功。 這樣您可以避免更改界面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.