有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中使用Path和Path

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

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

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

然而,在Path的情况下,没有使用“implements”关键字,也没有实现方法。它们已经预先定义好了

很明显,我在某个地方搞错了。有人能解释一下我误解了什么吗


共 (3) 个答案

  1. # 1 楼答案

    这是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
    

    在我们的例子中,这意味着路径可以返回实现路径的任何类的实例。如果我打印出实际的类名

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

    我去拿

    class sun.nio.fs.WindowsPath
    

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

  2. # 2 楼答案

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

    返回结果Path实现的对象(基于操作系统)。路径是通过调用默认FileSystemgetPath()方法获得的

  3. # 3 楼答案

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

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