【问题标题】:Java 8 Method expression is giving compilation errorJava 8 方法表达式给出编译错误
【发布时间】:2014-01-18 14:03:39
【问题描述】:

我是 Java 8(Lambda 表达式)的新手。下面这段代码打印了变量“file”所指示的路径下的所有目录。

File file = new File("/vssexclude/Test/workspace/Test");

File[] names = file.listFiles(fileName -> fileName.isDirectory());

for (File name : names) {
    System.out.println(name.toString());
}

但是,当我尝试用方法表达式替换 lambda 表达式时,eclipse 给出了编译错误:

File[] names = file.listFiles(File::isDirectory());

我错过了什么?

【问题讨论】:

  • 我还要补充一点,虽然功能可能相同,但您应该真正使用新的 Path 类,而不是从 Java 7 开始的 File。大多数情况下,它的工作原理相同,但更适合目录探测、名称连接、硬链接和软链接等。请参阅Files.newDirectoryStream()
  • 谢谢,我试试看。

标签: java lambda java-8


【解决方案1】:

去掉括号:

File[] names = file.listFiles(File::isDirectory);

当你想引用特定类型对象的实例方法时,使用的语法是:

ContainingType::methodName

这在here 中有更详细的描述。

【讨论】:

  • 哈哈哈!感谢你的回答。像小孩子一样犯错。 :-)
  • 我也检查了 Java 文档,但不知何故错过了括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多