2013-02-25 92 views
0

我正在爲非常基本的AI API創建一個包裝器。當這個API出現問題時,它不會拋出任何異常,否則會報告問題。可選異常處理

可能在調用API調用之前識別錯誤(例如錯誤參數)。

在包裝中,我想通過拋出運行時異常來實現錯誤指示。現在客戶可以決定他是否想要處理它們。在特殊情況下,我會拋出一個檢查過的異常,但有一個很好的理由。

問題是,當引發任何異常時,程序停止,無論如何都需要繼續。我想停止拋出異常,只是在記錄器中報告問題爲警告,但客戶端並不知道發生了錯誤。

AI調用每秒鐘更新的方法。

處理已檢查的異常是令人討厭的,因此即使調用非常簡單的調用,代碼也會變得非常難看。

+4

這聽起來像IllegalArgumentException出生的原因。只需讓調用此類的客戶端捕獲異常並進行適當處理即可。即使對於複雜的呼叫,它也不必是討厭或醜陋的。 – duffymo 2013-02-25 13:32:03

+0

如果你不想定義選中的異常,你仍然可以捕獲未經檢查的Excpetions,並確保你有一個能夠捕獲它們的代碼塊。 – vikingsteve 2013-02-25 13:32:32

+0

+1代表'IllegalArgumentException'。還要記住'IllegalStateException'的時候,「參數」只是沒有意義。 – 2013-02-25 13:44:44

回答

0

只需擴展Exception類或實現Throwable,就可以使用IllegalArgumentException或根據需要創建自定義異常。然後你可以管理你的應用程序的行爲。但是你需要確保塊被try-catch所包圍,所以你可以管理它們,API請求拋出異常,你需要在try-catch-block中捕獲它。例如:

try { 
String var = IamUsingThisAPI.methodOfTheAPI(); 
} catch (Exception e) { // You can create your custom Exception 
//maybe print stack trace but handle as you want 
System.out.println("Handling the exception"); 
// Do something 
// Do something 
} 
0

可以提供類似的方法:

public void doSomethingQuiet(...) { 
    try { 
     doSomething(...); 
    } catch (Exception ex) { 
     log.warn(ex.getMessage()); 
    } 
} 

public void doSomething(...) throws Exception { 
    if (incorrectArgs) { 
     throw new Exception("Incorrect arguments!"); 
    } 
    // process 
} 

您還可以更改方法名稱,以更加 '自然':doSomethingQuiet - > DoSomething的和DoSomething的 - > doSomethingThrowEx