java - 订阅者不是功能接口
问题描述
我有以下代码。为什么当 Flux 从 Publisher 扩展时,我不能在发布者的 subscribe 方法上使用 lambda,而我可以在 Flux 上使用?
Publisher<String> publisher = new Publisher<String>() {
@Override
public void subscribe(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello world");
subscriber.onNext("Hello world");
subscriber.onNext("Hello world");
subscriber.onNext("Hello world");
subscriber.onComplete();
}
};
//this lines gives me an error "Subscriber<String> is not a functional interface"
publisher.subscribe(System.out::println);
//no error on this line
Flux.just("a","b","c","d")
.subscribe(System.out::println);
解决方案
Publisher.subscribe
以 aSubscriber
作为参数,它不是函数式接口。
Flux
有一个以 a作为参数的重载subscribe
方法,它是一个函数式接口。实际上,您在最后一行中使用的是后一个版本。Consumer
请参阅Javadoc
推荐阅读
- javascript - 我正在尝试调用一个包含承诺的函数。Javascript
- java - 命令适用于终端,但不适用于 Kotlin
- java - 您可以在不传递参数的情况下从 main 之外的方法获取输入参数吗?
- java - FXMLLoader.load(url) 抛出的 IOException 不会被捕获
- servicenow - Bulk 和 Batch Rest API 以获取对象值
- docker - Jenkins 没有构建 docker 镜像,找不到 docker 命令
- python - 为什么我收到无效的语法错误 def swap(self,(x1,y1),(x2,y2)):
- javascript - 如何保持 $_POST 操作值不更改为 ajax 页面路径
- ios - Swinject:如何将委托模式与接口隔离(类与接口)一起使用?
- sql - 如何编写一个sql查询来对同一个表进行多个连接