为什么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对象,为什么这样做?
答案 0 :(得分:1)
+
与String
类型的至少一个操作数一起使用时,是String
连接运算符。您需要查看toString()
方法。
+运算符广泛用于打印语句。例如:
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();
来获取名称。