当前位置: 首页 > 知识库问答 >
问题:

为什么可选的isPresent类方法采用Consumer作为参数,而不是消费者?

卫浩瀚
2023-03-14

共有1个答案

罗安和
2023-03-14

最有可能的原因是允许使用者类型大于t(与t兼容的类型)的使用者参数使用。

这里有一个例子:

Optional<String> opt = Optional.of("abc");
Optional<Integer> intOptional = Optional.of(2);

Consumer<Object> printConsumer = System.out::println;
opt.ifPresent(printConsumer);
intOptional.ifPresent(printConsumer);

PrintConsumer只是一个打印对象的函数。因此,它可以同时使用stringinteger类型。

 类似资料:
  • 问题内容: 最近,我与队友讨论了 在方法中使用可选参数的问题。 假设方法是 接受一个和 可选参数 ,它返回该目录中列出的书籍,如果还传递了类别,则仅返回该类别中的书籍。 冲突点是,验证是否为空检查。我认为不应对此进行空检查,因为它是可选参数。函数的调用者可以通过或,并且函数应在实现中处理两种情况。 我的意见是,对于可选参数,只会使方法的约定更加明确。只需查看方法签名即可知道此参数是可选的,不需要读

  • 最近,我和我的队友讨论了在方法中使用作为可选参数。 假设方法是 我的观点是,对于可选参数,只会使方法的契约更加清晰。只要看一下方法签名就可以知道这个参数是可选的,不需要读取JavaDocs。但当他不想使用该可选参数时,不应强制他传递。 我的队友有不同的看法。他希望对其进行空检查,从而强制调用方始终传递。他的观点是为什么我们要通过一个空的可选选项。此外,看起来比更易读。 这个方法在我们的一个库包中,

  • 我想知道为什么在Java8API上,可选类有

  • 在使用来自Java背景的Swift时,为什么要选择结构而不是类呢?似乎它们是一样的,结构提供的功能较少。那为什么选择它呢?

  • 为什么Java中的方法将作为参数,而不是?这是一个问题,我找到的最好的答案是在这里,说明 这里最重要的概念是,通过提供方法引用(或函数),可以懒惰地初始化它。如果不需要,则不需要创建异常对象。只在你需要的时候创建它。 但我还是不明白。为什么对象创建不能是懒惰的?

  • 对于我的具体情况,我想在约简中使用函数合成;例如: 这有一个编译错误: 相反,我需要做的是: 但是,这就失去了composition提供的无点样式。 为什么流API是这样设计的?是,所以用超类型声明方法的参数不是更有意义吗?