2012-01-07 18 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のために+1です。だから、これは起こってはいけません。 – Perception

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

+0

@OppfinnarJockeああ、私はあなたを怒らせるつもりはありませんでした静的なイニシャライザについて知っていません。残念ながら、Javaを「ここに閉じ込める」と言う方法はありません。そのような機能があれば、例外は今よりももっと混乱するでしょう。ポイントは、すべての機能がほぼすべての機能と相互作用していることです。魔法のように例外がオフになってしまうと、同じコードがコンパイルされたり、見えないものに基づいてコンパイルされたりする可能性があります。 – alf

+0

ありがとうalf。私は怒られていませんでした。そういう場合には申し訳ありません...はい、例外チェックを完全に無効にすると混乱する可能性があることを理解していますが、コンパイラの指示によれば、これらのまれな(?)ケースでは、とにかく、代わりにStringを使用し、コード内のどこかでURLを作成します(try-catchが私にとってより適切だと思われます)。どうもありがとう。 – OppfinnarJocke

関連する問題