gpt4 book ai didi

java - 为什么Optional isPresent类方法采用Consumer<? super T> 作为参数,而不是 Consumer

转载 作者:行者123 更新时间:2023-12-02 18:39:22 26 4
gpt4 key购买 nike

我正在阅读有关通配符的内容,我有点困惑。我不太明白为什么 ifPresent 方法需要 ? super Tpublic void ifPresent(Consumer<? super T> consumer)为什么仅仅 T 不起作用?

我读过有关 PECS 的内容,很清楚它如何适用于类方法,例如,但为什么它出现在界面中,我很乐意提供帮助。

最佳答案

最可能的原因是允许 Consumer类型比T更广泛(这是与 T 兼容的类型)能够用于 consumer论证。

这是一个例子:

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类型。

如果ifPresent只花了Consumer<T> ,我们将无法编写上述代码,因为无法使用 Consumer<Object>哪里Consumer<String>Consumer<Integer>是必须的。但在消费者实例已经存在并且与多个 T 兼容的情况下类型,Consumer<? super T>使得重用消费者实例成为可能。

关于java - 为什么Optional isPresent类方法采用Consumer<? super T> 作为参数,而不是 Consumer<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68253063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com