2012-01-07 78 views
5

我想做繞過Java異常規範...?

public class Settings 
{ 
    static final URL logo = new URL("http://www.example.com/pic.jpg"); 
    // and other static final stuff... 
} 

,但我得到告訴我,我需要處理MalformedURLException。規格說MalformedURLException

拋出這一異常指示出現了錯誤的URL。在規範字符串中找不到合法協議,或者無法解析字符串。

現在,我知道我給的URL不是格式錯誤,所以我寧願不處理我知道不會發生的異常。

有沒有辦法避免不必要的try-catch-block堵塞我的源代碼?

回答

12

最短的回答是沒有。但是您可以創建一個靜態實用程序方法爲您創建URL。

private static URL safeURL(String urlText) { 
    try { 
     return new URL(urlText); 
    } catch (MalformedURLException e) { 
     // Ok, so this should not have happened 
     throw new IllegalArgumentException("Invalid URL " + urlText, e); 
    } 
} 

如果你需要從幾個地方這樣的東西,你應該把它放在一個實用程序類。

+0

簡潔明瞭。 +1 for'//好吧,所以這不應該發生' – Perception 2012-01-07 15:41:43

4

嘗試以下操作:

public class Settings 
{ 
    static final URL logo; 

    static 
    { 
     try 
     { 
      logo = new URL("http://www.example.com/pic.jpg"); 
     } 
     catch (MalformedURLException e) 
     { 
      throw new IllegalStateException("Invalid URL", e); 
     } 
    } 
    // and other static final stuff... 
} 
+0

是的,謝謝,我知道try-catch的語法和語義,這不是問題。我的問題是我**知道異常不會發生,這就是爲什麼我想避免用不必要的try-catch-clause來阻塞我的源代碼的原因。在C++中,我只是無視異常,編譯器不會糾纏我,對吧?在Java中......我真的認爲,應該有一種說服編譯器在這種情況下不強制執行異常規範的方法,即編譯器指令,如果沒有別的... – OppfinnarJocke 2012-01-07 18:06:04

+0

@OppfinnarJocke哦,我並不打算冒犯你 - 雖然你只是不知道靜態初始化器。不幸的是,沒有辦法說Java「只是在這裏閉嘴」:如果有這樣的特性,異常會比現在更加混亂。要點是,每個功能與幾乎所有其他功能交互。如果奇蹟般關閉異常,則意味着相同的代碼可以根據您甚至沒有看到的內容編譯或不編譯。 – alf 2012-01-07 18:09:02

+0

謝謝alf。我沒有冒犯,如果遇到這種情況,我很抱歉...是的,我明白完全關閉異常檢查可能會搞砸了,但編譯指示說,就像你說的那樣,「閉嘴」似乎很有用在這些罕見的(?)情況下。無論如何,我會用String代替,並在代碼中的其他地方創建URL(try-catch似乎更適合我)。非常感謝。 – OppfinnarJocke 2012-01-07 18:28:43