可以通过两种方式创建uri
:
URI uri = new URI("https://www.google.com/");
或,
URI uri = URI.create("https://www.google.com/");
我想知道哪种做法更好。我没有注意到任何性能差异,我已经阅读了文档,但它有点难以理解。任何关于这方面的见解都是值得赞赏的。
发布于 2015-08-03 12:45:55
阅读文档时,它的用法有所不同。
通过解析给定的链接工厂方法创建URI,就像通过调用{@link URI( string.This )}构造函数一样;构造函数抛出的任何{@link URISyntaxException}都被捕获并包装在一个新的{@link IllegalArgumentException}对象中,然后抛出该对象。
此方法用于已知给定字符串是合法URI的情况下,例如程序中声明的URI常量,因此不这样解析字符串将被认为是编程错误。直接抛出{@link URISyntaxException}的构造函数应该用于从用户输入或从其他可能容易出错的来源构造URI的情况。
@param str要解析为URI的字符串
*@如果{@code str}为{@code null},则*@返回新的URI **@抛出NullPointerException *如果给定的字符串违反RFC2396,则**@抛出IllegalArgumentException **
public static URI create(String str) {
try {
return new URI(str);
} catch (URISyntaxException x) {
throw new IllegalArgumentException(x.getMessage(), x);
}
}
发布于 2019-04-09 14:16:35
没有区别,因为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);
}
}
https://stackoverflow.com/questions/31779515
复制相似问题