泛型中和差别
泛型中 extends T>和 super T>差别
extends T?和 super T>含有JAVA5.0的新的概念。由于它们的外表导致了很多人误解了它们的用途:
1. extends T>首先你很容易误解它为继承于T的所有类的集合,这是大错特错的,相信能看下去你一定见过或用过List extends T>吧?为什么我说理解成一个集合是错呢?如果理解成一个集合那为什么不用List
2. super T>这里比较容易使用,没 extends T>这么多限制,这里的意思是,以T类为下限的某种类,简单地说就是T类的超类。但为什么add(T)可以呢?因为能放入某一类的容器一定可以放入其子类,多态的概念。擦除也许泛型最具挑战性的方面是擦除(erasure),这是 Java语言中泛型实现的底层技术。擦除意味着编译器在生成类文件时基本上会抛开参数化类的大量类型信息。编译器用它的强制类型转换生成代码,就像程序员在泛型出现之前手工所做的一样。区别在于,编译器开始已经验证了大量如果没有泛型就不会验证的类型安全约束。通过擦除实现泛型的含意是很重要的,并且初看也是混乱的。尽管不能将List赋给List,因为它们是不同的类型,但是List
new List
编译器只为 List 生成一个类。当生成了 List 的字节码时,将很少剩下其类型参数的的跟踪。当生成泛型类的字节码时,编译器用类型参数的擦除替换类型参数。对于无限制类型参数(
多重限制:
一个类型参数可以具有多个限制。当您想要约束一个类型参数比如说同时为 Comparable 和 Serializable 时,这将很有用。多重限制的语法是用“与”符号分隔限制:
class C
【泛型中和差别】interface Collection
关于何时可以使用类型形参,存在一些限制。大多数时候,可以在能够使用实际类型定义的任何地方使用类型形参。但是有例外情况。不能使用它们创建对象或数组,并且不能将它们用于静态上下文中或者处理异常的上下文中。还不能将它们用作父类型(class Foo>(其他参数化类型的实例化)。在带有类型形参 T 的参数化类型的定义中,您也可以声明List
推荐阅读
- ts泛型使用举例
- Kotlin泛型的高级特性(六)
- 家长必读|家长必读 (林徽因、陆小曼,都是富养的女儿,差别在哪里())
- 穷人和富人能有多大差别
- Kotlin|Kotlin 泛型之类型擦除
- 魔道祖师和陈情令差别有多大
- 【2022/02/02】thinkphp源码无差别阅读(三十五)
- 【2022/01/31】thinkphp源码无差别阅读(三十四)
- 【2022/01/31】thinkphp源码无差别阅读(三十三)
- 【2022/01/29】thinkphp源码无差别阅读(三十一)