Paths.get vs Path.of

20

Por lo que puedo ver, Paths.gety Path.ofparece hacer exactamente lo mismo, convertir una o más cadenas en un Pathobjeto; la documentación https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- y https: //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) usa la misma redacción. ¿Son de hecho idénticos?

Path.offue presentado más tarde. Conjetura: se introdujo en aras de un Foo.ofestilo coherente . En ese caso, ¿se consideraría preferible por razones de consistencia / estética?

rwallace
fuente
55
Creo que es correcto. Una búsqueda rápida en las listas de discusión de Java trajo esto: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Todavía estoy leyendo para escribir una respuesta.
Johannes Kuhn el
2
Prefiero Path.ofporque no requiere importación adicional
ZhekaKozlov

Respuestas:

22

De hecho, Path.offue presentado más tarde.

Conjetura: se introdujo en aras de un Foo.ofestilo coherente .

Desde el archivo de la lista de correo, este método se llamó una vezPath.get :

Los principales cambios en están en Path y Paths en java.nio.file.

Este parche copia los métodos Paths.get () a métodos estáticos en Path.get () y modifica los primeros para llamar a los últimos métodos respectivos. La especificación de la ruta se limpia ligeramente para no referirse a las rutas ni a sí misma, por ejemplo, "(ver Ruta)". Las anotaciones @implSpec se agregan a Paths para indicar que los métodos simplemente llaman a sus contrapartes en Path.
...

Esto fue cambiado más tarde cuando Brian Goetz sugirió que fuera consistente conFoo.of :

Por separado, Brian Goetz sugirió fuera de la lista que sería más consistente si estos métodos de fábrica fueran nombrados "de", así que supongo que el webrev se actualizará para ver cómo se ve.

Ahora a su última pregunta: "En ese caso, ¿se consideraría preferible por razones de consistencia / estética?"
En el correo inicial, Brian Burkhalter dijo que actualizó todas las referencias al nuevo método en Path:

Todos los archivos fuente en java.base se modifican para cambiar Paths.get () a Path.get () y eliminar la importación de Paths. ...

Por lo tanto, concluiría que Path.ofes preferible Paths.get.
De hecho, si mira el Javadoc Pathspara Java 13 , encontrará esta nota:

Nota de API :
se recomienda obtener una Pathvía a través de los Path.ofmétodos en lugar de a través de los getmétodos definidos en esta clase, ya que esta clase puede quedar obsoleta en una versión futura.

Johannes Kuhn
fuente
55
Tenga en cuenta que NIO.2 se introdujo en Java 7 cuando los métodos estáticos en las interfaces no eran posibles. Por lo tanto, necesita una clase de compañía, Paths. El uso del método de fábrica de la interfaz reduce la cantidad de tipos con los que debe lidiar el código. El estilo de nomenclatura es solo otro punto que se ha revisado ya que hubo esta oportunidad.
Holger