【发布时间】:2018-04-20 10:07:16
【问题描述】:
在我的情况下,我有一个消费者接受? extends String 的供应商并对其执行一些操作,因此声明如下:
final Consumer<? super Supplier<? extends String>> action = ...
问题是当我尝试执行该操作时,编译器似乎并不高兴,并出现以下错误:
这个表达式的目标类型必须是函数式接口
在我的例子中,我有一个客户的名字,所以下面一行会触发这个错误:
action.accept(customer::getName)
我的假设是 ? super Supplier<? extends String> 不再被视为功能接口,因为它是一种捕获类型。
那么,有人可以给我一个关于这种情况的明确解释吗?
【问题讨论】:
-
请告诉我们您使用的是哪个版本的 JDK,并提供完整的错误消息。
-
不确定这是否是您的问题的真正原因,但仅仅因为
Supplier是@FunctionalInterface,not 是否意味着它的任何超类/接口也是@FunctionalInterface。所以? super Supplier可以删除为Object,这不是@FunctionalInterface。您可能不是指? super Supplier,而只是Supplier。
标签: java java-8 functional-interface bounded-wildcard