web-dev-qa-db-fra.com

Paths.get vs Path.of

Pour autant que je sache, Paths.get et Path.of semble faire exactement la même chose, en transformant une ou plusieurs chaînes en un objet Path; 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 ...) utilisez le même libellé. Sont-ils en fait identiques?

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

18
rwallace

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

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

À partir des archives de la liste de diffusion, cette méthode était autrefois appelée Path.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 quand Brian Goetz a suggéré que cela soit cohérent avec 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.of est en effet préférable à Paths.get.
En effet, si vous regardez le Javadoc pour Paths pour Java 1 vous trouverez cette note:

Note de l'API :
Il est recommandé d'obtenir un Path via le Path.of méthodes plutôt que via les méthodes get définies dans cette classe car cette classe pourrait être dépréciée dans une future version.

19
Johannes Kuhn