Реализовать статический внутренний интерфейс как анонимный класс в Scala - PullRequest
0 голосов
/ 02 марта 2012

Я бы хотел использовать функции NIO.2 с Scala (классы в java.nio.file):

В Java я бы сделал:

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

Как я могу сделать то же самое в Scala? Fitler является статическим интерфейсом внутри интерфейса DirectoryStream.

Спасибо.

РЕДАКТИРОВАТЬ: Пожалуйста, не отвечайте, если вы хотите предложить мне другую библиотеку / метод для вывода списка файлов. В основном меня интересует основная проблема.

1 Ответ

5 голосов
/ 02 марта 2012

Не уверен на 100%, запрашиваете ли вы буквальное преобразование этого кода в scala:

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

.. или что-то еще? Вы можете добавить неявное преобразование:

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)

Теперь вы можете сделать это:

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