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/");
我想知道哪种做法更好。我没有注意到任何性能差异,我已经阅读了文档,但是它有点难以理解。任何对此的见解都是值得赞赏的。
可以通过两种方式创建 A:uri
URI uri = new URI("https://www.google.com/");
阿尔布
URI uri = URI.create("https://www.google.com/");
我想知道哪种做法更好。我没有注意到任何性能差异,我已经阅读了文档,但是它有点难以理解。任何对此的见解都是值得赞赏的。
阅读文档,它在用法上有所不同。
通过分析给定字符串来创建 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);
}
}
没有区别,因为将调用委托给构造函数。唯一真正的区别是将构造函数抛出的(已检查异常)包装到一个(未选中的异常)中。因此,如果您不想处理已检查的异常,最好只调用 .URI.create
URI.create(String)
URISyntaxException
IllegalArgumentException
URI.create(String)
这是来自JDK的代码段:
public static URI create(String str) {
try {
return new URI(str);
} catch (URISyntaxException x) {
throw new IllegalArgumentException(x.getMessage(), x);
}
}