在Java中使用路径和路径

时间:2013-05-08 07:43:51

标签: java path

Path和Paths之间的交互似乎很简单。您使用路径'get()方法获取Path对象。然后,您可以使用Path的方法:

Path p = Paths.get("C:\\directory\\filename.txt");
p.getFilename();
p.getRoot();
p.getParent();
etc...

令我困惑的是,Java文档将Path描述为一个接口。通常来说,接口只是方法签名的集合,您需要在任何类中实现它们,声明它通过implements关键字使用它。

但是,在Path的情况下,没有使用'implements'关键字,也没有实现这些方法。它们已经预定义了。

我显然在某个地方得到了错误的结局。有人可以解释一下我误解了什么吗?

4 个答案:

答案 0 :(得分:5)

是OOP替代原则http://en.wikipedia.org/wiki/Liskov_substitution_principle

If S is a T, then references to T can be changed to references to S

在我们的例子中,它意味着Paths可以返回实现Path的任何类的实例。如果我打印实际的班级名称

System.out.println(p.getClass());

我会得到

class sun.nio.fs.WindowsPath

正如您所看到的,这是Windows特定的Path实现。当然在Linux上我们会得到一些不同的东西。使用返回接口的静态工厂方法允许此方法更改此接口的实际实现。

答案 1 :(得分:1)

Path是一个界面。在代码中的某处选择对象,然后按F4以获取类型层次结构。这将向您展示实际的实现。你会看到这个:

Path
- AbstractPath
  - WindowPath
- ZipPath

Paths是一个具体的实现,它提供的服务是Path Paths.get(filename)Paths类将实例化您可以在类型层次结构中看到的具体实现之一。最佳做法是返回Path这里最通用的类​​型。因此,您自己的实现独立于Path的基础实现,可以是WindowPathZipPath

答案 2 :(得分:1)

Paths.get("C:\\directory\\filename.txt"); 

返回生成的Path实现的对象(基于操作系统)。通过调用默认getPath()的{​​{1}}方法获取路径。

答案 3 :(得分:0)

Path是一个接口,Paths.get()是用于生成具体实现的工厂方法。

返回的确切具体类将取决于您的操作系统和文件系统类型。