【问题标题】:Compiling issue for target type of this expression must be a functional interface此表达式的目标类型的编译问题必须是功能接口
【发布时间】:2018-02-22 17:40:57
【问题描述】:

我正在编译但收到上述错误。基本上这就是我所拥有的。

java.lang.Object obj = Account::getTestaccount;

Account 是一个类,它具有使用 setter 和 getter 方法声明的 TestAccount 对象。

谁能告诉我为什么这会引发错误。谢谢。

【问题讨论】:

  • Object是功能接口吗?
  • 不只是 java.lang.Object 类
  • 如错误所示,java.lang.Object 不是functional interface。事实上,它甚至不是一个界面。它是 Java 中所有类的基类。

标签: lambda java-8


【解决方案1】:

lambda 表达式或方法引用的目标类型必须functional interface,即任何带有 SAM(单一抽象方法)的接口

您的代码不起作用,因为java.lang.Object 不是功能接口。

查看您提供的代码 sn-p 似乎您正在寻找 Supplier 功能接口或 Supplier 的特定专业化。

Java 8 提供了丰富的功能接口系列,可以在这里找到:package java.util.function

【讨论】:

  • 例如,你可以做Object j = (Function<String, Integer>) String::length;
  • @Eugene 是的,但除非绝对必要,否则您应该避免这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多