Paths.get vs Path.of


20

Per quanto ne so, Paths.gete Path.ofsembra fare esattamente la stessa cosa, trasformando una o più stringhe in un Pathoggetto; la documentazione https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- e 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 stessa formulazione. Sono infatti identici?

Path.offu introdotto in seguito. Congettura: è stata introdotta per il gusto di uno Foo.ofstile coerente . In tal caso, sarebbe da preferire per coerenza / motivi estetici?


5
Penso che tu abbia ragione. Una rapida ricerca negli elenchi di discussione di Java ha sollevato questo: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Continuando a leggere per scrivere una risposta.
Johannes Kuhn,

2
Preferisco Path.ofperché non richiede ulteriore importazione
ZhekaKozlov il

Risposte:


22

Anzi, è Path.ofstato successivamente introdotto.

Congettura: è stata introdotta per il gusto di uno Foo.ofstile coerente .

Dall'archivio della mailing list, una voltaPath.get questo metodo veniva chiamato :

Le principali modifiche sono in Path e Paths in java.nio.file.

Questa patch copia i metodi Paths.get () in metodi statici in Path.get () e modifica il primo per chiamare i rispettivi metodi. Le specifiche del Path vengono leggermente ripulite per non fare riferimento a Path né a se stesso, ad es. "(Vedi Path)". Le annotazioni @implSpec vengono aggiunte ai Percorsi per indicare che i metodi chiamano semplicemente le loro controparti in Percorso.
...

Questo è stato successivamente modificato quando Brian Goetz ha suggerito che fosse coerente conFoo.of :

Separatamente, Brian Goetz ha suggerito fuori dall'elenco che sarebbe più coerente se questi metodi di fabbrica fossero denominati "di", quindi presumo che il webrev verrà aggiornato per vedere come appare.

Ora alla tua ultima domanda: "In tal caso, sarebbe considerato preferibile per coerenza / motivi estetici?"
Nella lettera iniziale Brian Burkhalter ha dichiarato di aver aggiornato tutti i riferimenti al nuovo metodo in Path:

Tutti i file di origine in java.base vengono modificati per cambiare Paths.get () in Path.get () e per rimuovere l'importazione per Paths. ...

Pertanto, concluderei che Path.ofè effettivamente preferibile Paths.get.
Infatti, se guardi Javadoc Pathsper Java 13 troverai questa nota:

Nota API :
si consiglia di ottenere un Pathtramite i Path.ofmetodi anziché tramite i getmetodi definiti in questa classe poiché questa classe potrebbe essere obsoleta in una versione futura.


5
Ricorda che NIO.2 è stato introdotto in Java 7 quando i metodi statici nelle interfacce non erano possibili. Quindi è necessaria una classe compagno, Paths. L'uso del metodo di fabbrica dell'interfaccia riduce il numero di tipi, che il codice deve affrontare. Lo stile di denominazione è solo un altro punto che è stato rivisto in quanto vi era questa opportunità.
Holger
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.