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

Lev*_*nal 16 java java-7 java.nio.file

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

Path path = Paths.get("C:\\Users");
Run Code Online (Sandbox Code Playgroud)

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

public static Path get(String first, String... more) {
    return FileSystems.getDefault().getPath(first, more);
}    
Run Code Online (Sandbox Code Playgroud)

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

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

小智 10

如果你仔细观察,你会发现,该方法getPathFileSystem对象返回执行路径接口.通过调用,FileSystems.getDefault()您将检索FileSystem将依赖于系统的接口的实现.在Linux系统上,你将获得LinuxFileSystem对象扩展UnixFileSystem类.

您可以在UnixFileSystemopenjdk的类中查找示例,这是FileSysteminterface的实现.

这是getPath来自UnixFileSystem的方法实现的链接,它将返回UnixPath的实例.

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

  • @iamprem:我认为你不能。请查看 openjdk。 (2认同)