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

最后修改: 2022年 9月 27日

中文/混合/英文(键盘快捷键:t)

 1. Overview

1.概述

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

在这篇文章中,我们将对Paths.get()Path.of()方法的异同进行评论。

2. Identical Behavior

2.相同的行为

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

Path.of()方法将URI作为参数并将其转换为相关对象的Path

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

现在让我们看一下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.

正如我们所看到的,Paths.get()所做的唯一事情就是调用Path.of()。因此,两个方法返回的结果是相同的。

3. The Differences Between the Methods

3.各种方法之间的差异

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

我们现在来评论一下这两种方法的区别。

3.1. Introduction Version

3.1.介绍版本

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

3.2.命名模式

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.

不仅代码被移动了,而且工厂方法的名称也确实改变了。原有名称的问题是,它看起来像一个getter。然而,Paths.get()并没有得到属于Paths对象的任何东西。Java中静态工厂方法的标准名称是of例如,EnumSet.of()遵循这种模式。因此,为了一致性,新方法被称为Path.of()

4. Which One Should We Use?

4.我们应该使用哪一个?

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

5.总结

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.

在本教程中,我们了解到两个相同的方法,Paths.get()Path.of(),由于一些历史原因而并存。我们分析了它们的区别,并根据我们的情况总结出了最适合我们的方法。