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

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

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

但是,在使用Path的情况下,没有使用“implements”关键字,并且您没有实现这些方法。它们已经预先定义。

我显然在某个地方弄错了方向。有人可以解释我误解了吗?

最佳答案

是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上,我们会有所不同。使用静态工厂方法返回接口可以使该方法更改此接口的实际实现。

10-01 14:28
查看更多