簡體   English   中英

使代碼錯誤穩定的最佳實踐是什么?

[英]What are the best practice of making code error stable?

我需要使一些代碼超級穩定,並確保塊中引發的所有異常都不會停止代碼執行。

現在,我有以下解決方案:

iterated.map(it -> {
   try {
      handleElement(it);
   } catch (Exception e) {
      handleError(e);
   }
});

但是從另一方面來說,我覺得應該有更優雅的方法來做到這一點。 請幫我找到它。

您的代碼沒有錯,我可能會保持原樣,但是如果您願意,您可以擁有一個處理另一個函數並捕獲異常的函數:

public class ExceptionCatcher<T, R> implements Function<T, R> {

    public final Function<T, R> function;

    public final Function<Exception, R> exceptionHandler;

    public ExceptionCatcher(Function<T, R> function, Function<Exception, R> exceptionHandler) {
        this.function = function;
        this.exceptionHandler = exceptionHandler;
    }

    @Override
    public R apply(T o) {
        try {
            return function.apply(o);
        }catch (Exception e){
            return exceptionHandler.apply(e);
        }

    }
};

您的代碼將如下所示:

ExceptionCatcher ex = new ExceptionCatcher(this::handleElement, this::handleError);
iterated.map(ex);

這只是一個例子。 您可能需要BiFunction並基於異常和失敗的onject映射到默認值,而不是簡單的Consumer。 或返回null並在此之后過濾null。 這很大程度上取決於您要實現的目標

那確實是調用異常的方法,但是更重要的是如何處理這些事件。 當應用遇到無法預期的情況時,應引發異常。 僅捕獲所有異常將

  • 不能使代碼更穩定,只是不會引發更高的異常
  • 錯誤保持原樣,並且仍然會拋出錯誤(您可能想要這樣做)
  • 刪除您可能想要記錄的異常

請記住,什么是您的應用程序真正的例外。 這里有些例子:

  • 您與后端的連接不穩定。 您知道這一點,並使應用程序可以重新連接和/或推遲操作,或者為了使該應用程序實際上不穩定的任何原因:
    • 這也不例外,如果需要,只需記錄一條消息。
  • 客戶輸入了一些信息
    • 也不例外,這種情況一直都在發生,應用應對此進行處理
  • 更新一些代碼后,即使建立連接也有問題
    • 例外:將其記錄下來並解決問題!

暫無
暫無

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

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