如何从枚举构造函数中抛出异常

S1l*_*0rm 4 java enums constructor exception

(参考这篇文章:如何从枚举构造函数中抛出异常?)

我真的想做同样的事情.示例代码:

public enum PublicIPWebservice {
    AMAZON_WEB_SERVICES("http://checkip.amazonaws.com"),
    EX_IP("http://api-ams01.exip.org/?call=ip"),
    WHAT_IS_MY_IP("http://automation.whatismyip.com/n09230945.asp");

private URL url;

private PublicIPWebservice(String url) throws MalformedURLException {
    this.url = new URL(url);
}

public URL getURL() {
    return url;
}
}
Run Code Online (Sandbox Code Playgroud)

如果url不正确,程序应该崩溃,因为这将是一个编程错误,所以在构造函数中捕获异常会是错误的,不是吗?

解决这个问题的最佳方法是什么?

ysh*_*vit 7

您可以捕获它并重新抛出AssertionError:

try {
    this.url = new URL(url);
}
catch(MalformedURLException e) {
    throw new AssertionError(e);
}
Run Code Online (Sandbox Code Playgroud)