Paths.get vs Path.of

20

Soweit ich das beurteilen kann Paths.getund Path.ofgenau dasselbe zu tun scheine, verwandle ich eine oder mehrere Saiten in ein PathObjekt; die Dokumentation https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- und https: //docs.oracle.com/de/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) Verwenden Sie den gleichen Wortlaut. Sind sie tatsächlich identisch?

Path.ofwurde später eingeführt. Vermutung: Es wurde aus Gründen eines einheitlichen Foo.ofStils eingeführt. In diesem Fall würde es aus Gründen der Konsistenz / Ästhetik als vorzuziehen angesehen?

rwallace
quelle
5
Ich denke du bist richtig. Eine schnelle Suche in den Java-Diskussionslisten ergab Folgendes : mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Lesen Sie immer noch, um eine Antwort zu schreiben.
Johannes Kuhn
2
Ich bevorzuge, Path.ofweil es keinen zusätzlichen Import erfordert
ZhekaKozlov

Antworten:

22

In der Tat Path.ofwurde später eingeführt.

Vermutung: Es wurde aus Gründen eines einheitlichen Foo.ofStils eingeführt.

Aus dem Mailinglistenarchiv wurde diese Methode einmal aufgerufenPath.get :

Die wichtigsten Änderungen in sind in Pfad und Pfade in java.nio.file.

Dieser Patch kopiert die Paths.get () -Methoden in statische Methoden in Path.get () und ändert die ersteren, um die letzteren entsprechenden Methoden aufzurufen. Die Pfadspezifikation wurde leicht bereinigt, um weder auf Pfade noch auf sich selbst zu verweisen, z. B. "(siehe Pfad)". @implSpec-Annotationen werden zu Pfaden hinzugefügt, um anzuzeigen, dass die Methoden einfach ihre Gegenstücke in Pfad aufrufen.
...

Dies wurde später geändert, als Brian Goetz vorschlug, dies zu vereinbaren mitFoo.of :

Unabhängig davon schlug Brian Goetz von der Liste vor, dass es konsistenter wäre, wenn diese Factory-Methoden "of" heißen würden. Ich gehe daher davon aus, dass die Webrev aktualisiert wird, um zu sehen, wie das aussieht.

Nun zu Ihrer letzten Frage: "In diesem Fall wird es aus Gründen der Konsistenz / Ästhetik als vorzuziehen angesehen?"
In der ersten Mail sagte Brian Burkhalter, dass er alle Verweise auf die neue Methode aktualisiert habe in Path:

Alle Quelldateien in java.base werden geändert, um Paths.get () in Path.get () zu ändern und den Import für Paths zu entfernen. ...

Ich würde daher zu dem Schluss kommen, dass dies Path.ofin der Tat vorzuziehen ist Paths.get.
Wenn Sie sich Javadoc Pathsfür Java 13 ansehen, finden Sie diesen Hinweis:

API-Hinweis :
Es wird empfohlen, eine Pathüber die Path.ofMethoden anstatt über die getin dieser Klasse definierten Methoden abzurufen, da diese Klasse in einer zukünftigen Version möglicherweise veraltet ist.

Johannes Kuhn
quelle
5
Beachten Sie, dass NIO.2 in Java 7 eingeführt wurde, als statische Methoden in Schnittstellen nicht möglich waren. Also brauchte es eine Begleiterklasse Paths. Durch die Verwendung der Factory-Methode der Schnittstelle wird die Anzahl der Typen reduziert, mit denen der Code umgehen muss. Der Benennungsstil ist nur ein weiterer Punkt, der überarbeitet wurde, da diese Gelegenheit bestand.
Holger