java中有没有一个实用程序可以在不检查异常的情况下解析URL?

pdsfdshx  于 2022-12-25  发布在  Java
关注(0)|答案(4)|浏览(98)

我想创建一个URL常量,如下所示

public static final URL REMOTE_URL = new URL("http://example.com/");

但是我不能,因为构造函数抛出了一个检查异常。

public static final URL REMOTE_URL = createUrl("http://example.com/");

private static URL createUrl(String url) {
    try {
        return new URL(url);
    } catch (MalformedURLException error) {
        throw new IllegalArgumentException(error.getMessage(), error);
    }
}

但是这感觉就像是在重新发明轮子。我不可能是唯一一个想使用URL常量的人,不是吗?所以我想知道是否有第三方工具箱库(比如guava或apache-commons,或者其他东西,任何东西),或者更好的是,标准Java中的一些东西包括这些设施?这将有助于我在开始一个新项目时减少我们的util包的大小:)。

lx0bsm1f

lx0bsm1f1#

这种抱怨一定很常见,因为Java(从1.7开始)就引入了URI类,你可以用以下方法构造它:

  • new URI(),引发检查异常
  • URI.create(),这将引发未检查的异常

对于像您这样已知来自安全源的URI/URL,您可以使用URI.create()变体,而不必担心捕获异常,因为您知道它不会被抛出。
不幸的是,有时候你不能使用URI,但你仍然需要一个URL,没有一个标准的方法(到目前为止我已经找到了)可以将URI转换成一个URL,而不会抛出一个检查异常。

s4n0splo

s4n0splo2#

既然其他人都只是在评论,我会提供答案,那就是不,没有标准的方法来做你想要的:)
另外,既然你提到了apache commons和google guava,我想指出的是,“标准”这个词也不完全正确......也许你想要开源、免费或者只是第三方。

dpiehjr4

dpiehjr43#

只是把这个放在混合中--完成同样的事情有很多风格上的变化,这个在静态init块中初始化,但是它不能是final。

public static URL g_url;

static {        

    try {
        g_url = new URL("http://www.example.org");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
gupuwyp2

gupuwyp24#

您不能扩展URL,因为它是最终的,但是您可以创建一个新的类,可能命名为MyURL,并让它将URL方法代理给私有(或受保护)URL成员。
下面是这样一个类的开始:

package blammo.url;

import java.net.MalformedURLException;
import java.net.URL;

public class MyURL
{
    private URL containedURL;

    public MyURL(final String spec)
    {
        try
        {
            containedURL = new URL(spec);
        }
        catch (MalformedURLException exception)
        {
            throw new RuntimeException(exception);
        }
    }

    public String getAuthority()
    {
        return containedURL.getAuthority();
    }

    // required for stuff that needs a URL class.
    public URL getContainedURL()
    {
        return containedURL;
    }
}

相关问题