Paths.getとPath.of


20

私の知る限り伝える、できるとPaths.getPath.ofまったく同じことを行うように見える、に一個の以上の文字列を回しPathオブジェクト。ドキュメント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 ... )同じ表現を使用します。それらは実際には同じですか?

Path.of後で紹介されました。予想:それは一貫したFoo.ofスタイルのために導入されました。その場合、それは一貫性/美的理由から好ましいと考えられますか?


5
私はあなたが正しいと思います。これを育てJavaのディスカッションリストの上にクイック検索:mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.htmlはまだ答えを書くためにかかわらず、読んで。
Johannes Kuhn

2
Path.of追加のインポートが必要ないため、私は好む
ZhekaKozlov

回答:


22

確かに、Path.of後に導入されました。

予想:それは一貫したFoo.ofスタイルのために導入されました。

メーリングリストのアーカイブから、このメソッドはかつて呼ばれていましたPath.get

の主な変更点は、java.nio.fileのパスとパスです。

このパッチは、Paths.get()メソッドをPath.get()の静的メソッドにコピーし、前者を変更して後者のそれぞれのメソッドを呼び出すようにします。パスの仕様は、パスやそれ自体を参照しないように少し整理されています。@implSpecアノテーションがパスに追加され、メソッドがパス内の対応するものを呼び出すだけであることを示します。
...

これは、Brian Goetzが次と一致するように提案したFoo.ofときに後で変更されました

これとは別に、Brian Goetz氏は、これらのファクトリメソッドの名前が「of」になっているとより一貫性があることをオフリストに提案したので、webrevが更新されてその様子がわかると思います。

さて、あなたの最後の質問に:「その場合、それは一貫性/美的理由で好ましいと考えられますか?
では、最初のメールブライアンBurkhalterは、彼が新しいメソッドへのすべての参照を更新することを言いましたPath

java.baseのすべてのソースファイルが変更され、Paths.get()がPath.get()に変更され、Pathsのインポートが削除されます。...

したがって、私はそれPath.ofが本当にに望ましいと結論づけPaths.getます。
実際、Java 13のJavadocをPaths見ると、次のような注記があります。

API注:このクラスは将来のリリースで廃止される可能性があるため、このクラスで定義されたメソッドではなく、メソッドを介し
て取得することをお勧めします。PathPath.ofget


5
NIO.2は、インターフェースの静的メソッドが不可能な場合にJava 7で導入されたことに注意してください。したがって、コンパニオンクラスが必要でしたPaths。インターフェイスのファクトリメソッドを使用すると、コードで処理する必要がある型の数が減ります。ネーミングスタイルはこの機会があったため改訂されたもう一つのポイントです。
Holger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.