路径和路径之间的交互似乎很简单。您可以使用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上,我们会有所不同。使用静态工厂方法返回接口可以使该方法更改此接口的实际实现。