Path和Paths之间的交互似乎很简单.使用Paths get()方法获取Path对象.然后,您可以使用Path的方法:
Path p = Paths.get("C:\\directory\\filename.txt");
p.getFilename();
p.getRoot();
p.getParent();
etc...
Run Code Online (Sandbox Code Playgroud)
令我困惑的是,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
Run Code Online (Sandbox Code Playgroud)
在我们的例子中,它意味着Paths可以返回任何实现Path的类的实例.如果我打印实际的类名
System.out.println(p.getClass());
Run Code Online (Sandbox Code Playgroud)
我去拿
class sun.nio.fs.WindowsPath
Run Code Online (Sandbox Code Playgroud)
如您所见,这是Windows特定的Path实现.当然在Linux上我们会得到一些不同的东西.使用返回接口的静态工厂方法允许此方法更改此接口的实际实现.
| 归档时间: |
|
| 查看次数: |
2294 次 |
| 最近记录: |