首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCPJP 8 II消费者对供应商IZ0 0-809

OCPJP 8 II消费者对供应商IZ0 0-809
EN

Stack Overflow用户
提问于 2018-06-01 15:05:43
回答 1查看 72关注 0票数 0

我正试图获得IZO-809认证,我正在阅读OCA/OCP SE8测试手册,其中的一段代码确实引起了我的注意。

密码让我想到了这个问题。

我知道消费者得到一个参数而不返回任何东西,而供应商没有参数并返回一个值。

但是这段代码在->之后几乎是一样的。

代码语言:javascript
复制
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);

这两种密码都能用。

但是,如果这个代码不起作用,我知道消费者不会返回任何东西。

代码语言:javascript
复制
private final Consumer<String>consumerString = String::length

我知道这不起作用,因为消费者没有返回一个值,我的问题是在供应商代码和消费者代码中,代码就在->标记之后,但是这次被认为是返回,实际上是类的一个实例。

我的问题是,为什么Java有时抱怨返回值而不是什么?

我是说这个密码。

代码语言:javascript
复制
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);

是在->之后返回相同的,但是为什么消费者不说错误。

代码语言:javascript
复制
incompatible types: bad return type in lambda expression

但如果我这么做的话

代码语言:javascript
复制
final Consumer<String>consumerString = a->1;

我认为->之后的代码是上下文推断的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 16:01:04

根据javadoc 消费者

表示接受单个输入参数而不返回结果的操作。

代码语言:javascript
复制
Consumer<Pregunts24>consumer = a->new Pregunta24(a);

实际上什么都不回。这基本上是Consumer#accept方法的实现,它接受T类型的对象,并以void作为返回类型。

代码语言:javascript
复制
public void accept(Pregunta24 a) {
    new Pregunta24(a);
}

你什么都没还给我。同事

代码语言:javascript
复制
Consumer<String>consumerString = String::length
public void accept(String a) {
    a.length();
}

然而,

代码语言:javascript
复制
Consumer<String>consumerString = a->1;

是一个无效的表达式,它被翻译成如下所示:

代码语言:javascript
复制
 public void accept(String a) {
        1;
 }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50646351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档