Paths.get ve Path.of karşılaştırması


20

Anlayabildiğim kadarıyla Paths.getve Path.oftam olarak aynı şeyi yapıyormuş gibi, bir veya daha fazla dizeyi bir Pathnesneye dönüştürmek gibi ; https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- ve https belgeleri : //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) aynı ifadeleri kullanın. Aslında aynı mı?

Path.ofdaha sonra tanıtıldı. Konjektif: tutarlı bir Foo.oftarz uğruna tanıtıldı . Bu durumda, tutarlılık / estetik gerekçelerle tercih edilebilir mi?


5
Bence haklısın. Java tartışma listeleri üzerinde hızlı bir arama bunu gündeme getirdi: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Yine de bir cevap yazmak için okumaya devam ediyor.
Johannes Kuhn

2
Path.ofEk ithalat gerektirmediği için tercih ederim
ZhekaKozlov

Yanıtlar:


22

Gerçekten de, Path.ofdaha sonra tanıtıldı.

Konjektif: tutarlı bir Foo.oftarz uğruna tanıtıldı .

Posta listesi arşivinden, bu yönteme bir zamanlar çağrıldıPath.get :

İçindeki ana değişiklikler java.nio.file dizinindeki Path ve Paths dizinleridir.

Bu düzeltme eki Paths.get () yöntemlerini Path.get () içindeki statik yöntemlere kopyalar ve ilkini, ilgili yöntemleri çağırmak üzere değiştirir. Yol belirtimi, Yollara veya kendisine değinmeyecek şekilde hafifçe temizlenir; @implSpec ek açıklamaları, yöntemlerin yollarını benzerlerini Yol'da çağırdıklarını belirtmek için Yollara eklenir.
...

Bu daha sonra Brian Goetz aşağıdakilerle tutarlı olmasını önerdiğindeFoo.of değişti :

Ayrı ayrı, Brian Goetz liste dışı bu fabrika yöntemleri "/" olarak adlandırılmış olsaydı daha tutarlı olacağını önerdi, bu yüzden webrev nasıl göründüğünü görmek için güncelleneceğini varsayalım.

Şimdi son sorunuza: "Bu durumda, tutarlılık / estetik gerekçelerle tercih edilebilir mi?"
Gelen ilk posta Brian Burkhalter o yeni yöntemde tüm başvuruları güncellenmiş söyledi Path:

Java.base içindeki tüm kaynak dosyaları Paths.get () öğesini Path.get () olarak değiştirmek ve Paths için içe aktarmayı kaldırmak için değiştirilir. ...

Bu yüzden bunun Path.ofgerçekten tercih edilebilir olduğu sonucuna varacağım Paths.get.
Aslında, Java 13 için Javadoc'aPaths bakarsanız, bu notu bulacaksınız:

API Not :
Bu bir elde etmek önerilir Patharacılığıyla Path.ofyöntemlerin yerine yoluyla getbu sınıf olarak bu sınıfta tanımlanmış yöntemler sonraki bir sürümde kaldırılmış olabilir.


5
Arabirimlerdeki statik yöntemler mümkün olmadığında NIO.2'nin Java 7'de tanıtıldığını unutmayın. Bu yüzden eşlik eden bir sınıfa ihtiyacı vardı Paths. Arayüzün fabrika yöntemini kullanmak, kodun ele alması gereken tür sayısını azaltır. Adlandırma stili, bu fırsat olduğu için gözden geçirilmiş başka bir noktadır.
Holger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.