有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中是否有一个无异常检查的URL解析实用程序?

编辑:似乎我在第一次听上去太恼火了,这里是一个返工

我想创建一个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或ApacheCommons,或者其他什么东西),或者更好的,标准Java中包含这些工具的东西?当我们开始一个新项目时,通过减小util包的大小,这将对我有所帮助:)


共 (4) 个答案

  1. # 1 楼答案

    您不能扩展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;
        }
    }
    
    
  2. # 2 楼答案

    因为其他人只是在评论,我会给出答案,不,没有标准的方法来做你想做的事情:)

    另外,既然你提到了apache commons和google guava,我想指出的是,标准也不是正确的词。。。。也许你想要开源的、免费的,或者只是第三方的

  3. # 3 楼答案

    这种抱怨肯定很常见,因为Java(从1.7开始)引入了URI类。这个类有两种构建方式:

    1. 使用URI。new,它抛出一个选中的异常
    2. 使用URI。create,它抛出一个未经检查的异常

    对于已知来自安全源的URI/URL,您可以使用该URI。create()变量,不必担心捕获异常,因为您知道它不会被抛出

    不幸的是,有时你不能使用URI,你仍然需要一个URL。到目前为止,还没有一种标准方法(我已经找到了)可以将URI转换为不引发选中异常的URL

  4. # 4 楼答案

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

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