URI.create() vs new URI()

2022-09-02 01:29:05

可以通过两种方式创建 A:uri

URI uri = new URI("https://www.google.com/");

阿尔布

URI uri = URI.create("https://www.google.com/");

我想知道哪种做法更好。我没有注意到任何性能差异,我已经阅读了文档,但是它有点难以理解。任何对此的见解都是值得赞赏的。


答案 1

阅读文档,它在用法上有所不同。

通过分析给定字符串来创建 URI。这个方便的工厂方法就像调用{@link URI(String)}构造函数一样工作;构造函数抛出的任何 {@link URISyntaxException} 都会被捕获并包装在一个新的 {@link IllegalArgumentException} 对象中,然后抛出该对象。

提供此方法是为了在已知给定字符串是合法 URI 的情况下使用,例如,对于程序中声明的 URI 常量,因此字符串不进行此类分析将被视为编程错误。直接抛出 {@link URISyntaxException} 的构造函数应该用于从用户输入或从可能容易出错的其他源构造 URI 的情况。

@param str 要解析为 URI 的字符串

 * @return The new URI
 *
 * @throws  NullPointerException
 *          If {@code str} is {@code null}
 *
 * @throws  IllegalArgumentException
 *          If the given string violates RFC 2396
 */
public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}

答案 2

没有区别,因为将调用委托给构造函数。唯一真正的区别是将构造函数抛出的(已检查异常)包装到一个(未选中的异常)中。因此,如果您不想处理已检查的异常,最好只调用 .URI.createURI.create(String)URISyntaxExceptionIllegalArgumentExceptionURI.create(String)

这是来自JDK的代码段:

public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}

推荐