Differences Between Paths.get and Path.of – Paths.get和Path.of之间的区别

最后修改: 2022年 9月 27日

 1. Overview


In this article, we’ll comment on the similarities and differences between the methods Paths.get() and Path.of().


2. Identical Behavior


The Path.of() method takes a URI as an argument and converts it into the Path of the associated object.


Let’s now have a look at the code of Paths.get():


public final class Paths {
    public static Path get(URI uri) {
        return Path.of(uri);

As we can see, the only thing Paths.get() does is call Path.of(). Therefore, the two methods return an identical result.


3. The Differences Between the Methods


We’ll now comment on the difference between those two methods.


3.1. Introduction Version


Before Java 8, it was not possible to define a default static method inside an interface. Hence Path needed a companion interface, Paths. All the factory methods were defined in Paths at this time.

在 Java 8 之前,不可能在接口中定义default static 方法因此,Path需要一个配套的接口,Paths。所有的工厂方法这时都被定义在Paths中。

Then this limitation was removed, and in Java 11, the code of the factory method has eventually been moved to the Path interface. Additionally, the code of Paths.get() was updated to defer to Path.of(). Paths.get() was indeed kept to ensure backward compatibility.

然后,这一限制被移除,在Java 11中,工厂方法的代码最终被转移到Path接口中。此外,Paths.get()的代码也被更新为推迟到Path.of()Paths.get()确实被保留下来,以确保向后兼容。

3.2. Naming Pattern


The code was not only moved, but the name of the factory method did also change. The problem with the original name is that it looks like a getter. However, Paths.get() doesn’t get anything that belongs to the Paths object. The standard name for static factory methods in Java is of. For instance, EnumSet.of() follows this pattern. As a consequence, the new method was called Path.of() for consistency purposes.


4. Which One Should We Use?


If we’re working with a version between Java 7 and 10, we have no other choice but to use Paths.get(). Otherwise, if we’re working with a later version, we should go for Path.of(). The Paths class may indeed be deprecated in a future Java release, as it’s stated in the class’ comments. Moreover, using directly the factory method from Path spares an additional input.

如果我们使用的是 Java 7 和 10 之间的版本,我们没有其他选择,只能使用 Paths.get()否则,如果我们使用的是较晚的版本,我们应该使用Path.of()Paths类确实可能在未来的Java版本中被弃用,因为该类的注释中已经说明。此外,直接使用Path的工厂方法可以节省一个额外的输入。

5. Conclusion


In this tutorial, we’ve understood that the two identical methods, Paths.get() and Path.of(), coexist for some historical reasons. We’ve analyzed their differences and concluded with the most suitable fit for us depending on our situation.