2012-01-07 14 views
5

chcę zrobićSpecyfikacja wyjątku java java ...?

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

ale zostanę poinformowany, że muszę obsłużyć MalformedURLException. Specyfikacje mówią, że MalformedURLException to

Zgłaszany w celu wskazania, że ​​wystąpił nieprawidłowy adres URL. W łańcuchu specyfikacji nie znaleziono żadnego protokołu prawnego lub nie można przeanalizować łańcucha.

Teraz wiem, że adres URL, który podaję, nie jest zniekształcony, więc wolałbym nie obsługiwać wyjątku, o którym wiem, że nie może wystąpić.

Czy istnieje jednak sposób na uniknięcie niepotrzebnego blokowania try-catch blokującego mój kod źródłowy?

Odpowiedz

12

Najkrótsza odpowiedź to nie. Ale możesz utworzyć statyczną metodę użyteczności, aby utworzyć adres 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); 
    } 
} 

Jeśli potrzebujesz czegoś takiego z kilku miejsc, prawdopodobnie powinieneś umieścić go w klasie narzędziowej.

+0

prosty i zwięzły. +1 dla '// Ok, więc to nie powinno się zdarzyć' – Perception

4

Spróbuj wykonać następujące czynności:

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

Tak, dziękuję, znam składnię i semantykę try-catch, to nie jest problem. Moim problemem jest to, że ** wiem **, że wyjątek nigdy nie może wystąpić, dlatego chcę uniknąć zapychania mojego kodu źródłowego niepotrzebnymi try-catch-clauses. W C++ po prostu zignoruję wyjątek i kompilator nie będzie mnie z tego powodu niepokoił, prawda? W Javie ... Naprawdę myślę, że powinien istnieć sposób przekonania kompilatora, aby nie wymuszał wyjątku spec w tym przypadku, dyrektywy kompilatora, jeśli nic innego ... – OppfinnarJocke

+0

@OppfinnarJocke Oh, nie zamierzałem cię obrazić - chociaż po prostu nie wiesz o statycznych inicjalizatorach. Niestety, nie ma sposobu, aby powiedzieć, że Java "po prostu się tu zamknij": gdyby istniała taka funkcja, wyjątki byłyby jeszcze większym bałaganem niż teraz. Chodzi o to, że każda cecha współdziała z prawie wszystkimi innymi. Wyłączenie magicznie wyjątków oznaczałoby, że ten sam kod mógłby się skompilować lub nie skompilować w oparciu o coś, czego nawet nie widać. – alf

+0

Dzięki alf. Nie obraziłem się, przepraszam, jeśli natknąłem się w ten sposób ... Tak, rozumiem, że wyłączenie sprawdzania wyjątków całkowicie mogłoby narobić bałaganu, ale dyrektywa kompilująca, aby powiedzieć, jak to ujęłeś, "zamknij się tutaj" wydaje się przydatna w tych rzadkich (?) przypadkach. W każdym razie użyję zamiast tego ciągu i utworzę URL gdzie indziej w kodzie (gdzie try-catch wydaje mi się bardziej odpowiedni). Wielkie dzięki. – OppfinnarJocke

Powiązane problemy