Paths.get vs Path.of

20

Sejauh yang saya tahu, Paths.getdan Path.oftampaknya melakukan hal yang persis sama, mengubah satu atau lebih string menjadi Pathobjek; dokumentasi https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- dan https: //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String ,java.lang.String ... ) menggunakan kata-kata yang sama. Apakah mereka sebenarnya identik?

Path.ofdiperkenalkan kemudian. Dugaan: itu diperkenalkan demi Foo.ofgaya yang konsisten . Dalam hal itu, itu akan dianggap lebih disukai atas dasar konsistensi / estetika?

rwallace
sumber
5
Aku pikir kamu benar. Pencarian cepat pada daftar diskusi java memunculkan ini: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Masih membaca meskipun menulis jawaban.
Johannes Kuhn
2
Saya lebih suka Path.ofkarena tidak memerlukan impor tambahan
ZhekaKozlov

Jawaban:

22

Memang, Path.ofkemudian diperkenalkan.

Dugaan: itu diperkenalkan demi Foo.ofgaya yang konsisten .

Dari arsip milis, metode ini pernah disebutPath.get :

Perubahan utama di dalam Path dan Paths di java.nio.file.

Patch ini menyalin metode Paths.get () ke metode statis di Path.get () dan memodifikasi yang pertama untuk memanggil metode masing-masing yang terakhir. Spesifikasi Path sedikit dibersihkan untuk tidak merujuk ke Paths atau dirinya sendiri, misalnya, "(lihat Path)." @implSpec penjelasan ditambahkan ke Paths untuk menunjukkan bahwa metode hanya memanggil rekan-rekan mereka di Path.
...

Ini kemudian diubah ketika Brian Goetz menyarankan agar konsisten denganFoo.of :

Secara terpisah, Brian Goetz menyarankan di luar daftar bahwa akan lebih konsisten jika metode pabrik ini dinamai "of" jadi saya menganggap webrev akan diperbarui untuk melihat tampilannya.

Sekarang untuk pertanyaan terakhir Anda: "Dalam hal itu, itu akan dianggap lebih disukai berdasarkan konsistensi / estetika?"
Dalam surat awal Brian Burkhalter mengatakan bahwa ia memperbarui semua referensi ke metode baru di Path:

Semua file sumber di java.base dimodifikasi untuk mengubah Paths.get () ke Path.get () dan menghapus impor untuk Paths. ...

Jadi saya akan menyimpulkan bahwa Path.ofmemang lebih disukai Paths.get.
Memang, jika Anda melihat Javadoc Pathsuntuk Java 13 Anda akan menemukan catatan ini:

Catatan API :
Dianjurkan untuk memperoleh Pathmelalui Path.ofmetode alih-alih melalui getmetode yang didefinisikan dalam kelas ini karena kelas ini mungkin tidak digunakan lagi dalam rilis mendatang.

Johannes Kuhn
sumber
5
Pikiran bahwa NIO.2 diperkenalkan di Java 7 ketika metode statis di antarmuka tidak memungkinkan. Sehingga dibutuhkan kelas pendamping, Paths. Menggunakan metode pabrik antarmuka mengurangi jumlah jenis, kode harus berurusan dengan. Gaya penamaan hanyalah hal lain yang telah direvisi karena ada peluang ini.
Holger