java - 破译泛型语法

标签 java generics

我正在阅读下面给出方法签名的问题

public static <E extends CharSequence> List<? super E> doIt(List<E> nums)  

我无法解码语法。我对泛型很陌生,无法理解 这部分。第一部分不是 < E extends CharSequence>告诉 E 应该是什么,两者 for 作为参数和返回类型。但我确实看到了List<? super E> , 这定义了 返回类型的边界。有人可以通过示例帮助我理解这一点吗?

谢谢。

最佳答案

<E extends CharSequence>

表示E将是 CharSequence 的子类型.这告诉编译器将传递给此方法的类型参数将是 CharSequence。或该类型的子类型。这种类型的绑定(bind)称为参数绑定(bind)。我写了an article关于这个话题,如果你喜欢可以去看看。

List<? super E>

表示此方法将返回 List类型为 E 的元素或其父类(super class)型。

因此,可以从您的 doIt 返回以下所有类型方法-

// trivial one.
return new ArrayList<E>();

// If F is a super type of E, then the following line is valid too.
return new ArrayList<F>();

// The following will also be valid, since Object is a super type of all
// other types.
return new ArrayList<Object>();

List<? super E> - 这通常被称为逆变。 Check this out .

关于java - 破译泛型语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426840/

相关文章:

delphi - 如何在 Delphi 10.2 中创建通用接口(interface)的列表?

c# - 使用 WPF 4.5 通用弱事件管理器来处理路由事件?

java - 从命令行编译 java 类时找不到符号错误

java - 将数组转换为 ArrayList 的通用方法

generics - 协议(protocol)中的通用闭包

java - Android - 如何制作一个改变两个值的微调器

java - 为什么我的双层 map 不起作用?

Java Web 应用程序健康检查良好实践

java进程构建器添加环境路径不起作用

java - 如何增加Android Studio分配的内存?