!!!!!!!!!!!!!!
只是自己在看《Thinking in java》时的一点笔记
!!!!!!!!!!!!!!
java泛型
简单泛型:
简单泛型:一个对象通过泛型存储各种类型的对象
一个元祖类库: 通过一个元祖使得return可以一次返回多个对象
泛型接口:
Generator<T>
泛型方法:
! static方法无法访问泛型类的类型参数,所以,如果static方法需要使用泛型,必须使其成为泛型方法。
匿名内部类:
用匿名内部类的方式实现与泛型接口一样的功能,与实现泛型接口的区别就是每个子类需要在类内部实现一个匿名内部类。
擦除:
java的泛型,只在编译时有效,保障编译期间的类型安全。在运行期,所有的泛型都变为Object。 泛型类型参数将擦除到它的第一个边界。
!泛型类型只有在静态类型检查期间才出现。
!在泛型代码内部,无法获得任何有关泛型参数类型的信息。
!泛型不能显示的引用运行时类型的操作之中,例如 转型、instanceof、new表达式
因为擦除在方法体中移除了类型信息,所以在运行时的问题就是边界:即对象进入和离开方法的地点!!!
如果引用了类型标签就可以使用动态的isInstance(XX)
new T()无法成功的原因一个是擦除,另一个是无法确定T是否有无参构造函数
对于一个工厂方法,如果传递了Class类型 并且使用类型标签就可以newInstance()
泛型数组,不能创建泛型数组。只能通过强制转换(T[])。
边界:
extends
通配符:
超类型通配符 super
无界通配符
!捕获转换 《Thinking in java》P399
问题:
积累劫持了接口。 基类实现的接口带有泛型,子类实现同样接口不能 修改接口所带的泛型。
自限定的类型:
保证类型参数必须与正在被定义的类相同。
!如果不使用自限定,将重载参数类型。如果使用了自限定,只能获得某个方法的一个版本,他将接受确切的参数类型。
动态类型安全:
为了兼容老版本
异常:
由于擦除的原因,catch语句是不能捕获泛型类异常的。
混型
潜在类型机制
对缺乏潜在类型机智的补偿
反射将所有的类型检查转移到了运行时。
后面还有