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

2022-09-02 13:44:19

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


答案 1

如果仔细观察,您会注意到对象中的方法返回 Path 接口的实现。通过调用,您将检索接口的实现,这将取决于系统。在Linux系统上,你会得到对象女巫扩展类。getPathFileSystemFileSystems.getDefault()FileSystemLinuxFileSystemUnixFileSystem

例如,你可以从openjdk的类中查找,这是接口的实现。UnixFileSystemFileSystem

下面是 UnixFileSystem 中方法实现的链接,它将返回 UnixPath 的实例。getPath

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


答案 2

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

  • 第一步:

    在编写路径代码的行上单击光标。示例路径为:

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

  • 第二步:

单击“调试|”步入式 (F7)

它将显示路径的实现细节


推荐