首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >URI.create() vs new URI()

URI.create() vs new URI()
EN

Stack Overflow用户
提问于 2015-08-03 12:38:06
回答 2查看 29.9K关注 0票数 22

可以通过两种方式创建uri

代码语言:javascript
运行
复制
URI uri = new URI("https://www.google.com/");

或,

代码语言:javascript
运行
复制
URI uri = URI.create("https://www.google.com/");

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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 **

代码语言:javascript
运行
复制
public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}
票数 24
EN

Stack Overflow用户

发布于 2019-04-09 14:16:35

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

以下是JDK中的代码片段:

代码语言:javascript
运行
复制
public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31779515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档