gpt4 book ai didi

java - 函数输入类型的通用有界通配符

转载 作者:太空狗 更新时间:2023-10-29 22:49:12 24 4
gpt4 key购买 nike

在阅读Stream 接口(interface)源代码时,我发现了这个方法签名:

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

我想知道为什么mapper的输入类型是? super T 而输出类型是 ?扩展 R,为什么不使用 ?为两者扩展

最佳答案

假设您想将一个 CharSequence 映射到另一个 CharSequence(因此 T = R = CharSequence)。哪些功能适合您?

Function<Object, String> fn1 = Object::toString;

对你有好处吗?是的,因为它可以接受任何 CharSequence(也是Object)并将其转换为String(也是 CharSequence)。

Function<CharSequence, StringBuilder> fn2 = StringBuilder::new;

对你有好处吗?是的,因为它可以采用任何 CharSequence 并将其转换为StringBuilder(也是CharSequence)。

Function<String, String> fn3 = String::trim;

对你有好处吗?不,因为它不能接受任何 CharSequence,只能接受其中的一些。

因此您可以看到第一个类型参数必须是 CharSequence 或任何父类(super class),但第二个必须是 CharSequence 或任何子类。

关于java - 函数输入类型的通用有界通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139289/

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