OCPJP 8 II消费者与供应商IZ0-809

时间:2018-06-01 15:05:43

标签: java-8

我正在尝试获得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;之后的代码是上下文推断

很抱歉,如果问题很明显。

委内瑞拉致以最诚挚的问候。

1 个答案:

答案 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;
 }