首页 > 解决方案 > 订阅者不是功能接口

问题描述

我有以下代码。为什么当 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);

标签: javareactor

解决方案


Publisher.subscribe以 aSubscriber作为参数,它不是函数式接口。

Flux有一个以 a作为参数的重载subscribe方法,它一个函数式接口。实际上,您在最后一行中使用的是后一个版本。Consumer

请参阅Javadoc


推荐阅读