Void 不是一个功能接口



我正在尝试订阅可观察的,例如:

List<String> colors = Arrays.asList("RED", "BLACK", "WHITE", "GREEN", "YELLOW", "BROWN", "PURPUL", "BLUE");
Observable.just(colors).subscribe(s -> System.out.println(s));

它工作正常,但是如果我使用方法引用编译器会给出错误"void 不是函数迭代面">

谁能解释一点点?根据我,订阅者接受消费者功能接口,它不返回任何内容,但我们可以打印流数据,例如:

Observable.just(colors).subscribe(s -> System.out::println);// NOT COMPILE

您的方法引用语法错误。这样改变它,

Observable.just(colors).subscribe(System.out::println);

只需以下几点就足够了:

Observable.just(colors).subscribe(System.out::println);

在编写方法引用时,您不必在此之前提及 arg。

'subscriber' 方法将 Consumer(一个函数接口(作为一个参数,它有一个抽象方法 void accept(T t(。所以在这里我们可以传递 lambda 表达式。

正如我们所知,'println' 返回 void,因此我们可以在这里使用它。

subscribe(s -> System.out.println(s((; 将给我们正确的输出。 但是,如果我们想将其编写为方法引用,则无需将参数"s"作为println方法。 这就是Java中方法引用语法的典型方式。

最新更新