web-dev-qa-db-ja.com

URI.create()と新しいURI()

uriは次の2つの方法で作成できます。

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

または、

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

どっちがいいのかしら。パフォーマンスの違いに気づかず、ドキュメントを読みましたが、理解するのが少し難しかったです。これについての洞察は大歓迎です。

14
UnknownOctopus

ドキュメントを読むと、使い方が異なります。

指定された文字列を解析して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);
    }
}
15
Ankur Singhal

_URI.create_は呼び出しをコンストラクターに委譲するため、違いはありません。唯一の真の違いは、URI.create(String)は、コンストラクターがスローするURISyntaxException(チェック済み例外)をIllegalArgumentException(チェックなし例外)にラップするため、チェック済み例外を処理したくない場合は、URIを呼び出すだけです。 .create(文字列)

JDKのコードの一部を次に示します。

_public static URI create(String str) {
    try {
        return new URI(str);
    } catch (URISyntaxException x) {
        throw new IllegalArgumentException(x.getMessage(), x);
    }
}
_
0
Alfredo Osorio