2015-08-03 19 views
5

Một uri có thể được tạo ra theo hai cách:URI.create() vs URI mới()

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

Hoặc,

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

tôi đã tự hỏi đó là một thực hành tốt hơn. Tôi đã không nhận thấy bất kỳ sự khác biệt hiệu suất và tôi đã đọc tài liệu, tuy nhiên nó là một chút khó hiểu. Bất kỳ cái nhìn sâu sắc về điều này được đánh giá cao.

Trả lời

6

Đọc tài liệu, nó khác với cách sử dụng.

Tạo một URI bằng cách phân tích các nhà máy thuận tiện string.This cho phương pháp làm việc như thể bằng cách gọi các {@link URI (String)} constructor; bất kỳ {@link URISyntaxException} nào được khởi tạo bởi hàm tạo sẽ bị bắt và được bao bọc trong đối tượng {@link IllegalArgumentException} mới, sau đó được ném.

Phương pháp này được cung cấp để sử dụng trong những tình huống mà nó được biết rằng chuỗi cho trước là một URI pháp, ví dụ cho URI hằng tuyên bố trong một chương trình, và vì vậy nó sẽ được coi là một lỗi lập trình cho chuỗi không phân tích cú pháp như vậy. Các nhà thầu , trực tiếp ném {@link URISyntaxException}, nên các tình huống được sử dụng khi URI đang được xây dựng từ đầu vào của người dùng hoặc từ một số nguồn khác có thể dễ bị lỗi.

@ param str Các chuỗi được phân tích thành một 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); 
    } 
} 
+0

Oh còn nữa, vì vậy các điểm chính là cách nó xử lý ngoại lệ. Tôi phải bỏ lỡ điều đó trong tài liệu. Cảm ơn – UnknownOctopus

+0

Tôi tự hỏi bởi tại sao IllegalArgumentException lại tốt hơn URISyntaxException như thế nào. Quyết định thiết kế kỳ lạ. –

Các vấn đề liên quan