为什么java接口返回自己<java.nio.file.path> </java.nio.file.path>

时间:2014-04-14 03:33:23

标签: java interface

为什么java接口会自行返回?

我正在阅读当前的代码

public class Find {
public static class Finder extends SimpleFileVisitor<Path>{
    private final PathMatcher matcher;
    private int numMatches = 0;

    Finder(String pattern){
        matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
    }

    void find(Path file){
        Path name = file.getFileName();
        System.out.println("Name " + name);
        if (name != null && matcher.matches(name)){
            numMatches++;
            System.out.println(file);
        }
    }

    void done(){
        System.out.println("Matched: " + numMatches);
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs){
        find(file);
        return CONTINUE;
    }

查看file.getFileName(),它由接口

表示
public interface Path
extends Comparable<Path>, Iterable<Path>, Watchable

但是返回值正如你在行

中看到的那样
System.out.println("Name " + name);

它必须是字符串,因为它是可打印的。

但是看看界面

/**
 * Returns the name of the file or directory denoted by this path as a
 * {@code Path} object. The file name is the <em>farthest</em> element from
 * the root in the directory hierarchy.
 *
 * @return  a path representing the name of the file or directory, or
 *          {@code null} if this path has zero elements
 */
Path getFileName();

它返回一个Path对象,为什么这样做?

3 个答案:

答案 0 :(得分:1)

+String类型的至少一个操作数一起使用时,是String连接运算符。您需要查看toString()方法。

Java tutorial on Strings

  

+运算符广泛用于打印语句。例如:

String string1 = "saw I was "; 
System.out.println("Dot " + string1 + "Tod"); 
     

打印

Dot saw I was Tod 
     

这种连接可以是任何一种的混合   对象。对于不是String的每个对象,其toString()方法   被调用以将其转换为String。

基本上,所有引用类型都继承Object类,因此继承toString()方法。当您连接String和不同类型的引用时,将调用该类型的toString()方法,并将结果String连接起来。

答案 1 :(得分:0)

这句话是错误的:

  

它必须是字符串,因为它是可打印的。

当使用变量代替String时,Java编译器将隐式调用对象的toString()方法(所有对象都有)。对于将输出路径的字符串表示的Path。仅仅因为打印文本的内容并不意味着它是一个真实的String实例。

答案 2 :(得分:0)

Path getFileName()返回Path Object,所以每当我们打印对象时,都会调用它的toString()方法,该方法继承自Object类。

所以调用了Path的toString()方法,它以字符串形式返回路径对象。

如果有这样的方法,可以使用path.getFileName().getName();来获取名称。