Paths.get проти Path.of


20

Наскільки я можу сказати, Paths.getі, Path.ofздається, роблю абсолютно те саме, перетворюючи одну або кілька струн в Pathоб’єкт; документація https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html#get-java.lang.String-java.lang.String...- та https: //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html#of(java.lang.String,java.lang.String ... ) використовувати те саме формулювання. Чи насправді вони однакові?

Path.ofбуло введено пізніше. Концепція: вона була введена заради послідовного Foo.ofстилю. У такому випадку це вважатиметься кращим за послідовністю / естетичною ознакою?


5
Я думаю, ти прав. Швидкий пошук списків обговорень java підніс це: mail.openjdk.java.net/pipermail/nio-dev/2018-March/004810.html Я все ще читаю, хоча щоб написати відповідь.
Йоханнес Кун

2
Я вважаю за краще, Path.ofтому що він не потребує додаткового імпорту
Жека Козлов

Відповіді:


22

Дійсно, Path.ofпізніше було введено.

Концепція: вона була введена заради послідовного Foo.ofстилю.

З архіву списку розсилки колись називалиPath.get цей метод :

Основні зміни в "Шлях" та "Шляхи" в java.nio.file.

Цей патч копіює методи Paths.get () до статичних методів у Path.get () та модифікує перший для виклику останніх відповідних методів. Специфікація Шляху трохи очищена, щоб не посилатися ні на Шляхи, ні на себе, наприклад, "(див. Шлях)." @implSpec анотації додаються до Paths, щоб вказати, що методи просто викликають своїх аналогів у Path.
...

Пізніше це було змінено, коли Брайан Гец запропонував йому відповідатиFoo.of :

Окремо Брайан Гец запропонував зняти з списку, що було б більш послідовно, якщо ці заводські методи будуть названі "з", тому я припускаю, що webrev буде оновлений, щоб побачити, як це виглядає.

Тепер до вашого останнього запитання: "У такому випадку це вважатиметься кращим за послідовністю / естетичною ознакою?"
У початковій пошті Брайан Буркхалтер сказав, що оновив усі посилання на новий метод у Path:

Усі вихідні файли в java.base змінюються, щоб змінити Paths.get () на Path.get () та видалити імпорт для Paths. ...

Тому я б зробив висновок, що Path.ofце справді краще Paths.get.
Дійсно, якщо ви подивитеся на Javadoc Pathsдля Java 13, ви знайдете цю примітку:

Примітка API :
Рекомендується отримувати методи методом Pathчерез, Path.ofа не через getметоди, визначені в цьому класі, оскільки цей клас може бути застарілим у майбутньому випуску.


5
Майте на увазі, що NIO.2 був введений в Java 7, коли статичні методи в інтерфейсах були неможливі. Тому потрібен клас компаньйона, Paths. Використання заводського методу інтерфейсу зменшує кількість типів, з кодом доводиться мати справу. Стиль іменування - це ще один момент, який було переглянуто, як з’явилася ця можливість.
Хольгер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.