Vla*_*eev 12 java generics nio nio2
我正在研究Java NIO.2及其文件操作,目前我正在使用filetree-walking函数和类.
NIO.2 FileVisitorAPI非常棒,很遗憾,最近才将这种东西添加到Java SE中,而不是十年前.然而,有些东西让我感到困扰:制作FileVisitor界面通用的重点是什么?
网上的每个例子都显示了如何使用它,Files.walkFileTree()这意味着我们正在使用FileVisitor<Path>类型.但我只是看不到任何用于此接口的用途Path.好吧,有可能用它FileVisitor来走其他类型的树(内存中的那些?),但这感觉不对:这个接口和相关的类在语义上与文件绑定了非常具体的名称,还有FileVisitor方法扔IOException秒.
那么,参数化FileVisitor类型有什么原因吗?
使用泛型,相同的接口可用于其他类型的路径.如下面(简化的)代码片段所示,该接口适用于java.io.File:
FileVisitResult walk(File file, FileVisitor<File> visitor)
throws IOException
{
if (file.isDirectory()) {
visitor.preVisitDirectory(file, null);
for (File child : file.listFiles()) {
walk(child, visitor);
}
return visitor.postVisitDirectory(file, null);
} else {
return visitor.visitFile(file, null);
}
}
Run Code Online (Sandbox Code Playgroud)