我正在尝试获得IZO-809认证我正在阅读OCA / OCP SE8测试书,而且代码确实引起了我的注意。
代码让我回答了这个问题。
我知道消费者得到一个参数而不返回任何内容,供应商没有参数并返回一个值。
但是这个代码在 - >。
之后几乎相同public class Pregunta24{
private final Object obj;
public Pregunta24(final Object obj){
this.obj = obj;
}
}
//Returns a Supplier
private final Supplier<Pregunta24>supplier = ()->new Pregunta24("HI");
//Returns a Consumer.
private final Consumer<Pregunta24>consumer = a->new Pregunta24(a);
两个代码都有效。
但如果这段代码不起作用,我知道消费者什么也不回报。
private final Consumer<String>consumerString = String::length
我知道这不起作用,因为消费者不会返回我的问题在供应商代码中的值,而消费者代码代码就在 - &gt;之后。标记,但这次被认为是实际返回的一个实例。
我的问题是为什么有时候Java投诉是一种返回值而不是什么?
我的意思是这段代码。
private final Supplier<Pregunta24>supplier = ()->new Pregunta24("HI");
// I would think is returning a instance of the Pregunta24 class.
private final Consumer<Pregunts24>consumer = a->new Pregunta24(a);
在&gt;之后返回相同的内容但为什么消费者不要说错误。
incompatible types: bad return type in lambda expression
但如果这样做我
final Consumer<String>consumerString = a->1;
我认为 - &gt;之后的代码是上下文推断
很抱歉,如果问题很明显。
委内瑞拉致以最诚挚的问候。
答案 0 :(得分:2)
根据javadoc Consumer:
表示接受单个输入参数的操作 没有结果。
Consumer<Pregunts24>consumer = a->new Pregunta24(a);
实际上并没有返回任何东西。这基本上是Consumer#accept
方法的实现,该方法接受类型为T
的对象并且具有void
作为返回类型。
public void accept(Pregunta24 a) {
new Pregunta24(a);
}
你没有归还任何东西。与
相同Consumer<String>consumerString = String::length
public void accept(String a) {
a.length();
}
然而
Consumer<String>consumerString = a->1;
是一个无效的表达式,它被翻译成如下:
public void accept(String a) {
1;
}