18

最近我正在使用 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 接口的实际实现位置,因为我似乎无法找到发生这种情况的位置。

4

2 回答 2

13

如果你仔细看,你会注意到getPath来自FileSystemobject 的方法返回 Path 接口的实现。通过调用FileSystems.getDefault(),您将检索FileSystem依赖于系统的接口的实现。在 Linux 系统上,您将获得LinuxFileSystem对象女巫扩展UnixFileSystem类。

例如,您可以查看UnixFileSystem来自 openjdk 的类,它是FileSystem接口的实现。

这是UnixFileSystemgetPath方法实现的链接,它将返回UnixPath的实例。

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

于 2013-12-30T11:05:25.330 回答
2

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

  • 第一步:

    在您编写路径代码的行上单击光标。一个示例路径是:

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

  • 第二步:

单击调试 | 步入 (F7)

它将调出 Paths 的实现细节

于 2015-03-31T14:59:55.377 回答