Paths.get vs Path.of


20

Theo như tôi có thể nói, Paths.getPath.ofdường như làm chính xác điều tương tự, biến một hoặc nhiều chuỗi thành một Pathđối tượng; tài liệu https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...-https: //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) sử dụng từ ngữ tương tự. Chúng có thực sự giống hệt nhau không?

Path.ofđược giới thiệu sau. Phỏng đoán: nó được giới thiệu vì lợi ích của một Foo.ofphong cách nhất quán . Trong trường hợp đó, nó sẽ được coi là thích hợp hơn trên cơ sở nhất quán / thẩm mỹ?


5
Tôi nghĩ rằng bạn là chính xác. Một tìm kiếm nhanh trên danh sách thảo luận java đã đưa ra điều này: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Vẫn đọc mặc dù để viết câu trả lời.
Julian Kuhn

2
Tôi thích Path.ofbởi vì nó không yêu cầu nhập thêm
ZhekaKozlov

Câu trả lời:


22

Thật vậy, Path.ofsau đó đã được giới thiệu.

Phỏng đoán: nó được giới thiệu vì lợi ích của một Foo.ofphong cách nhất quán .

Từ kho lưu trữ danh sách gửi thư, phương thứcPath.get này đã từng được gọi là :

Những thay đổi chính trong Đường dẫn và Đường dẫn trong java.nio.file.

Bản vá này sao chép các phương thức Paths.get () thành các phương thức tĩnh trong Path.get () và sửa đổi cái trước để gọi các phương thức tương ứng sau. Đặc tả Đường dẫn được làm sạch một chút để không tham chiếu đến Đường dẫn cũng như chính nó, ví dụ, (xem Đường dẫn). Các chú thích @implSpec được thêm vào Đường dẫn để chỉ ra rằng các phương thức chỉ đơn giản gọi các đối tác của chúng trong Đường dẫn.
...

Điều này sau đó đã được thay đổi khi Brian Goetz đề nghị nó phù hợp vớiFoo.of :

Một cách riêng biệt, Brian Goetz đề xuất ngoài danh sách rằng nó sẽ phù hợp hơn nếu các phương thức xuất xưởng này được đặt tên là "của" vì vậy tôi cho rằng webrev sẽ được cập nhật để xem giao diện đó như thế nào.

Bây giờ đến câu hỏi cuối cùng của bạn: "Trong trường hợp đó, nó sẽ được coi là thích hợp hơn trên cơ sở tính nhất quán / thẩm mỹ?"
Trong thư ban đầu, Brian Burkhalter nói rằng ông đã cập nhật tất cả các tham chiếu đến phương thức mới trong Path:

Tất cả các tệp nguồn trong java.base được sửa đổi để thay đổi Paths.get () thành Path.get () và để xóa việc nhập cho Đường dẫn. ...

Vì vậy, tôi sẽ kết luận rằng Path.ofthực sự thích hợp hơn Paths.get.
Thật vậy, nếu bạn xem Javadoc Pathscho Java 13, bạn sẽ thấy ghi chú này:

Lưu ý API :
Nên lấy Paththông qua các Path.ofphương thức thay vì thông qua các getphương thức được xác định trong lớp này vì lớp này có thể không được dùng trong bản phát hành trong tương lai.


5
Lưu ý rằng NIO.2 đã được giới thiệu trong Java 7 khi các phương thức tĩnh trong giao diện là không thể. Vì vậy, nó cần một lớp học đồng hành Paths,. Sử dụng phương thức xuất xưởng của giao diện giúp giảm số lượng các loại, mã phải xử lý. Phong cách đặt tên chỉ là một điểm khác đã được sửa đổi khi có cơ hội này.
Holger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.