java.nio.file:Path接口实际在哪里实现?

问题描述 投票:15回答:2

最近我使用Java 7中引入的java.nio.file包进行了一些编码,并看到了一个使用Path的示例:

Path path = Paths.get("C:\\Users");

鉴于Path是一个接口,我对如何引用它感到困惑,但经过一些研究后我发现允许对接口的引用,但它必须指向实现接口的类。从这看起来我查看了Paths类,发现它没有实现Path。查看源代码的实际方法Paths.get方法如下:

public static Path get(String first, String... more) {
    return FileSystems.getDefault().getPath(first, more);
}    

该方法首先使用我认为称为静态工厂方法的方式返回FileSystem类型的对象(我认为是抽象类),但FileSystem也没有实现该接口。

我的问题是有没有人知道/能够解释Path接口实际实现的位置,因为我似乎无法找到它发生的位置。

java java-7 java.nio.file
2个回答
8
投票

如果你仔细观察,你会发现getPath对象的方法FileSystem返回Path接口的实现。通过调用FileSystems.getDefault(),您将检索FileSystem接口的实现,这将取决于系统。在Linux系统上,你将获得LinuxFileSystem对象女巫扩展UnixFileSystem类。

您可以在openjdk中查看UnixFileSystem类中的示例,这是FileSystem接口的实现。

以下是getPath实现UnixFileSystem方法的链接,该方法将返回UnixPath的实例。

您必须记住FileSystems.getDefault返回依赖于操作系统的实现。此外,oracle jdk中没有这些类的源代码。


1
投票

在NetBeans IDE中,您可以通过执行以下操作查看Paths类的实现详细信息:

  • 第一步: 在您编写路径代码的行上单击光标。路径示例如下:

路径p = Paths.get(“someDir \ someOtherDir”);

  • 第二步:

单击Debug |步入(F7)

它将显示Paths的实现细节

© www.soinside.com 2019 - 2024. All rights reserved.