Paths.get vs 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ยังคงอ่านแม้ว่าจะเขียนคำตอบ
Johannes Kuhn

2
ฉันชอบPath.ofเพราะไม่ต้องนำเข้าเพิ่มเติม
ZhekaKozlov

คำตอบ:


22

แน่นอนPath.ofได้รับการแนะนำในภายหลัง

การคาดเดา: มันถูกนำมาใช้เพื่อประโยชน์ของFoo.ofสไตล์ที่สอดคล้องกัน

จากการเก็บถาวรรายการจดหมายวิธีPath.getนี้ถูกเรียกครั้งเดียว :

การเปลี่ยนแปลงที่สำคัญคือในเส้นทางและเส้นทางใน java.nio.file

แพ็ตช์นี้คัดลอกเมธอด Paths.get () ไปเป็นเมธอดแบบคงที่ใน Path.get () และปรับเปลี่ยนแบบเก่าเพื่อเรียกเมธอดตามลำดับหลัง สเปคพา ธ นั้นได้รับการทำความสะอาดเล็กน้อยเพื่อไม่ให้อ้างอิงกับพา ธ หรือตัวเองเช่น "(ดูเส้นทาง)" @implSpec คำอธิบายประกอบจะถูกเพิ่มไปยังเส้นทางเพื่อระบุว่าวิธีการเพียงเรียกคู่ของพวกเขาในเส้นทาง
...

นี่คือการเปลี่ยนแปลงในภายหลังเมื่อBrian Goetz แนะนำให้สอดคล้องกับFoo.of :

แยกกัน Brian Goetz แนะนำรายการนอกว่ามันจะสอดคล้องกันมากขึ้นถ้าวิธีการโรงงานเหล่านี้มีชื่อว่า "ของ" ดังนั้นฉันคิดว่า webrev จะได้รับการอัปเดตเพื่อดูว่ามีลักษณะอย่างไร

ทีนี้คำถามสุดท้ายของคุณ: "ในกรณีนี้มันจะได้รับการพิจารณาว่าเหมาะสมกว่าในความสอดคล้อง / ความงาม?"
ในจดหมายฉบับแรก Brian Burkhalter กล่าวว่าเขาได้อัพเดทการอ้างอิงทั้งหมดไปยังวิธีการใหม่ในPath:

ไฟล์ต้นฉบับทั้งหมดใน java.base ถูกแก้ไขเพื่อเปลี่ยน Paths.get () เป็น Path.get () และเพื่อลบการนำเข้าสำหรับ Paths ...

ดังนั้นผมจึงจะสรุปได้ว่าย่อมเป็นที่นิยมในการPath.of แน่นอนถ้าคุณดูJavadoc สำหรับ Java 13คุณจะพบบันทึกนี้:Paths.get
Paths

API หมายเหตุ :
ขอแนะนำให้รับPathผ่านPath.ofวิธีการแทนผ่านgetวิธีการที่กำหนดไว้ในคลาสนี้เนื่องจากคลาสนี้อาจถูกคัดค้านในการเปิดตัวในอนาคต


5
โปรดทราบว่า NIO.2 ถูกนำมาใช้ใน Java 7 เมื่อไม่สามารถใช้วิธีคงที่ในส่วนต่อประสานได้ Pathsดังนั้นจึงจำเป็นต้องใช้ระดับสหาย ใช้วิธีการที่โรงงานของอินเทอร์เฟซลดจำนวนชนิดรหัสมีการจัดการ รูปแบบการตั้งชื่อเป็นเพียงอีกจุดหนึ่งที่ได้รับการแก้ไขเนื่องจากมีโอกาสนี้
Holger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.