0

我想将 URL 实例化为类中的私有字段,但我无法捕获 MalformedURLException。我尝试过使用静态初始化块,但这也不起作用。我该如何解决这个问题?

public class MyClass{ 

    private final static URL DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")

    ...
}
4

5 回答 5

6

如果发生异常,您将需要抛出一些东西。一个Error应该做的工作。

public class MyClass{ 

    private static final URL DEFAULT_URL;
    static {
        try {
            DEFAULT_URL = new URL("http://www.yadayada.com?wsdl")
        } catch (java.net.MalformedURLException exc) {
            throw new Error(exc);
        }
    }
    ...
}

如果抛出异常(不应该),该类将无法初始化。

于 2013-06-04T10:49:50.640 回答
5

一个简单的解决方法是创建一个静态方法:

private final static URL DEFAULT_URL = getDefaultUrl();

private static URL getDefaultUrl() {
    try {
        return new URL("http://www.yadayada.com?wsdl"); 
    } catch (Exception e) {
        //what do you want to do here?
        return null; //that is an option
        throw new AssertionError("Invalid URL"); //that is another one
    }
}
于 2013-06-04T10:50:11.577 回答
1

您可以在静态块中执行此操作

public class MyClass { 

    private final static URL DEFAULT_URL; 

    static {
      try {
       DEFAULT_URL = new URL("http://www.yadayada.com?wsdl");
    } catch (MalformedURLException e) {
    }
}
于 2013-06-04T10:50:03.237 回答
0

使用静态块初始化器 - 您可能会在块内捕获异常。

但是,我不建议将其存储为最终类字段作为 URI。将其作为字符串常量并在构造函数或特殊init()实例方法中初始化

于 2013-06-04T10:50:47.020 回答
0

下面试试。您不能在以下内容中使用 final 关键字:

private static URL DEFAULT_URL = null;
    static{
        try {
            DEFAULT_URL = new URL("http://www.yadayada.com?wsdl");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
于 2013-06-04T10:50:47.283 回答