簡體   English   中英

如何通過無效方法影響返回值

[英]How to Effect a Return Value from Void Method

這是我的代碼:

deleteStuffFromDb(); // void method
deleteStuffFromCache();

deleteStuffFromDb()是具有返回類型void的接口方法。

理想情況下,第一種方法將返回一個值(成功/失敗)。 此返回值將確定第二種方法是否執行。

我可以修改接口,因為它被2個類調用。 但是,仍然存在這樣的風險,作為一個沒有完整了解系統的運維開發人員,我可能會破壞一些東西。

您如何建議我確定此void deleteStuffFromDb()的執行是否確定deleteStuffFromCache()的執行。

我想過一些方法:

  1. 在deleteStuffFromDb()周圍進行嘗試/捕獲,針對錯誤情況拋出異常。 如果遇到catch(),則不要執行deleteStuffFromCache()。
  2. 將deleteStuffFromCache()的邏輯放入方法中,deleteStuffFromDb(),並在此方法中允許/禁止其執行
  3. ...?

請給我您的想法和選擇的理由。

謝謝。

我可以修改接口,因為它被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()拋出NoSuchElementExceptionIllegalStateException 。還有更多這樣的示例),這些方法是為了成功在其中拋出異常失敗的情況,例如

 public void deleteStuffFromDb(){
      ..... usual code..
      if (failedCondition){
           throw new RuntimeErrorException(new Error("Couldn't delete"));
      }
 }

在調用方,如果得到拋出的異常,則可以假設這是失敗,否則就是成功。 這樣您可以避免更改界面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM