可以通过两种方式创建uri
:
URI uri = new URI("https://www.google.com/");
或者,
URI uri = URI.create("https://www.google.com/");
我想知道哪种更好的做法。我没有注意到任何性能差异并且我已经阅读了文档,但是它有点难以理解。对此有任何见解表示赞赏。
答案 0 :(得分:15)
阅读文档,它的用法不同。
通过解析给定的字符串来创建URI。这个便利工厂 方法就好像通过调用{@link一样 URI(String)}构造函数;构造函数抛出的任何{@link URISyntaxException}都会被捕获并包装在新的{@link中 IllegalArgumentException}对象,然后抛出。
此方法用于已知的情况 给定的字符串是合法的URI ,例如URI常量 在程序中声明,因此它将被视为a 字符串编程错误,不能解析。该 应该直接抛出{@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);
}
}
答案 1 :(得分:0)
没有区别,因为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);
}
}