Обойти спецификацию исключений Java ...? - PullRequest
5 голосов
/ 07 января 2012

хочу сделать

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, засоряющего мой исходный код?

Ответы [ 2 ]

12 голосов
/ 07 января 2012

Самый короткий ответ - нет.Но вы можете создать статический служебный метод для создания 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);  
     }
 }

Если вам нужно что-то подобное из нескольких мест, вам, вероятно, следует поместить его в служебный класс.

4 голосов
/ 07 января 2012

Попробуйте следующее:

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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...