Paths.get vs Path.of

20

Autant que je sache, Paths.getet Path.ofsemble faire exactement la même chose, transformer une ou plusieurs cordes en un Pathobjet; la documentation https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- et https: //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) utilisent le même libellé. Sont-ils en fait identiques?

Path.ofa été présenté plus tard. Conjecture: elle a été introduite dans un souci de cohérence Foo.of. Dans ce cas, serait-il jugé préférable pour des raisons de cohérence / esthétique?

rwallace
la source
5
Je pense que vous avez raison. Une recherche rapide sur les listes de discussion java a fait apparaître ceci: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Toujours en lecture mais pour écrire une réponse.
Johannes Kuhn
2
Je préfère, Path.ofcar il ne nécessite pas d'importation supplémentaire
ZhekaKozlov

Réponses:

22

En effet, a Path.ofété introduit plus tard.

Conjecture: elle a été introduite dans un souci de cohérence Foo.of.

À partir des archives de la liste de diffusion, cette méthode s'appelait autrefoisPath.get :

Les principaux changements dans sont dans Path et Paths dans java.nio.file.

Ce correctif copie les méthodes Paths.get () dans les méthodes statiques de Path.get () et modifie les premières pour appeler les dernières méthodes respectives. La spécification Path est légèrement nettoyée pour ne pas faire référence à Paths ni à elle-même, par exemple, "(voir Path)". Les annotations @implSpec sont ajoutées aux chemins pour indiquer que les méthodes appellent simplement leurs homologues dans le chemin.
...

Cela a été changé plus tard lorsque Brian Goetz a suggéré qu'il soit conforme àFoo.of :

Séparément, Brian Goetz a suggéré hors liste qu'il serait plus cohérent si ces méthodes d'usine étaient nommées "of", donc je suppose que la webrev sera mise à jour pour voir à quoi cela ressemble.

Passons maintenant à votre dernière question: "Dans ce cas, cela serait-il jugé préférable pour des raisons de cohérence / esthétique?"
Dans le courrier initial, Brian Burkhalter a déclaré qu'il avait mis à jour toutes les références à la nouvelle méthode dans Path:

Tous les fichiers source dans java.base sont modifiés pour changer Paths.get () en Path.get () et pour supprimer l'importation pour Paths. ...

Je conclurais donc que Path.ofc'est effectivement préférable à Paths.get.
En effet, si vous regardez le Javadoc Pathspour Java 13, vous trouverez cette note:

Remarque sur l'API :
Il est recommandé d'obtenir un Pathvia les Path.ofméthodes plutôt que via les getméthodes définies dans cette classe car cette classe pourrait être déconseillée dans une future version.

Johannes Kuhn
la source
5
Gardez à l'esprit que NIO.2 a été introduit dans Java 7 lorsque les méthodes statiques dans les interfaces n'étaient pas possibles. Ainsi , il avait besoin d' une classe compagnon, Paths. L'utilisation de la méthode d'usine de l'interface réduit le nombre de types que le code doit gérer. Le style de dénomination est juste un autre point qui a été révisé car il y avait cette opportunité.
Holger