1.为什么要有泛型?
是为了把运行时的错误提前到编译期就发现,不会发生CaseClass Exception。
代码更简洁,无需强转
代码更灵活复用
2.java泛型有几种?
有3种,泛型接口:在接口名字后面加<T> | 泛型类:在类名后面加<T> | 泛型方法:在返回值前加<T>,当泛型参数有多个的时候,因单根继承有且只有一个类,可以多个接口&符号链接,且类必须写最前面。
3.泛型原理是什么?泛型的擦除机制是什么?
4.java编译器具体是如何擦除泛型的?
5.泛型擦除了为什么还能够反射?
实际还是保留在了类的常量池里面,retrofit中HttpServiceMethod类就用到了该技术。
6.泛型类型不能够使用基本变量,为什么?为什么不能使用instance of 来判断对象类型?
7.泛型还有哪些你知道的问题?
泛型在静态方法和静态类中的问题:
没法创建泛型实例:
没有泛型数组:
以下可推导关系称为协变,泛型类型擦除后无法满足协变原则:
<? extends T>后遗症:
<? super T>后遗症:
总结:
Java泛型PECS原则: