在Scala中将静态内部接口实现为匿名类

wok*_*oky 0 static scala nested interface java-7

我想在Scala中使用NIO.2特性(类在java.nio.file中):

在Java中我会这样做:

Files.newDirectoryStream(Paths.get("/tmp"), new DirectoryStream.Filter<Path>() {
  @Override
  public boolean accept(Path entry) throws IOException {
    return false;
  }
});
Run Code Online (Sandbox Code Playgroud)

我怎么能在Scala中做同样的事情?该Fitler是内部的静态接口DirectoryStream界面.

谢谢.

编辑:如果您想建议我另一个列出文件的库/方法,请不要回复.我主要对主要问题感兴趣.

oxb*_*kes 5

不是100%确定您是否要求在scala中对此代码进行文字转换:

Files.newDirectoryStream(Paths.get("/tmp"), new DirectoryStream.Filter[Path] {
  def accept(entry: Path) = false
})
Run Code Online (Sandbox Code Playgroud)

..或者是其他东西?您可以添加隐式转换:

class PathPredicateFilter(p: Path => Boolean) 
  extends DirectoryStream.Filter[Path] {
  def accept(entry: Path) = p(entry)
}
implicit def PathPredicate_Is_DirectoryStreamFilter(p: Path => Boolean) 
  = new PathPredicateFilter(p)
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

Files.newDirectoryStream(Paths.get("/tmp"), (p: Path) => false /* your code here */)
Run Code Online (Sandbox Code Playgroud)