【问题标题】:"Path is not a functional interface" compilation error in Java classJava类中的“路径不是功能接口”编译错误
【发布时间】:2015-09-01 15:45:42
【问题描述】:

我在尝试构建 Java 1.8 项目时收到以下错误:

COMPILATION ERROR : 
-------------------------------------------------------------
error: incompatible types: Path is not a functional interface
1 error

没有与错误相关的行号,但 Netbeans 在项目中的一个类的包声明下显示红色波浪线。该类甚至不使用 Path 。它在使用 Path 的同一个包中扩展了一个抽象类,如果相关的话。

有人见过这个吗?有关如何解决此问题的任何想法?

【问题讨论】:

  • 由于您还没有发布任何代码,我不能肯定地说,但这看起来很相关http://stackoverflow.com/questions/23682243/lambda-can-only-be-used-with-functional-interface。谷歌搜索错误让我知道了这一点以及其他一些看起来很有用的东西。
  • 我不确定共享哪些代码有用,但我愿意接受建议。我知道功能接口只能有一种方法,但我不确定为什么我的代码会出现这种情况。项目中没有用户定义的接口,功能与否。另外,错误似乎是说路径有问题,而不是我的课程之一。在项目的其他地方,我确实导入了 java.nio.file.Path,这是一个非功能性接口。为什么编译器会突然认为不应该这样?
  • 尝试使用命令行javac编译源文件,看看Netbeans配置是否有问题。

标签: java-8


【解决方案1】:

函数式接口有一个“单一抽象方法”(SAM)。也许您正试图以需要它是 SAM(例如作为 lambda)的方式使用 Path,但 Path 不是 SAM。 https://dzone.com/articles/introduction-functional-1

【讨论】:

  • 这似乎是个好主意。不过,我真的没有看到类似的东西。如果我注释掉文件中 Netbeans 认为错误所在的所有内容,那么我可以毫无问题地构建项目。所以,不知何故,这个甚至不使用 Path 的类导致了这个编译错误。
  • 认为这是导致问题的原因。一旦我确定 Netbeans 关于哪个类有错误是正确的,我就更仔细地查看了该代码。构造函数中有一些奇怪的东西。构造函数的参数之一没有正确连接到它在 lambda 表达式中的提及。我注意到该 lambda 表达式中缺少其他内容的参数。当我修复它时,构造函数参数连接到 lambda 表达式中参数的提及并且错误消失了。
  • 不过,为了关闭循环,有问题的 lambda 表达式在任何地方都没有使用 Path,所以我仍然不明白为什么错误会以这种特殊方式出现。很奇怪。
  • 很难说没有看到任何代码,但我的猜测是编译器出于某种原因推断您的 lambda 被用作路径。为了让函数式编程不繁琐(到处都是冗余类型),Java 8 在更多地方添加了类型推断,如果你犯了错误,偶尔会导致令人困惑的编译错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多