1. 泛型
1.1 个人总结
1.1.1. 为什么需要
解决运行时类型转换的安全问题,即尽可能的将运行时的类型转换提前到编译时进行检查
1.1.2. 实现方式
类型擦除,即在编译时使用类型参数的上界(没有限定就是Object,有限定就是第一个限定类型)替换类型参数,生成原始类型的字节码文件
使用这种方式的原因:兼容,尤其是二进制兼容(这样以前编译的代码可以直接使用,无需修改编译或者做少量的修改再编译)
1.1.3. 工作方式
就是在编译时由编译器进行类型转换检查,并插入类型转换的字节码(具体的可以通过反编译字节码文件了解)
1.1.4. 原则
既然主要是为了解决安全问题,那么可能导致不安全的行为一般都是不允许的,安全的行为一般都是允许的,但是也有例外为了兼容Java允许泛型类型和对应的原始类型相互赋值,如下:
public void add(ArrayList list){
list.add(1.0);
}
ArrayList<String> al = new ArrayList<>();
add(al);
String str = al.get(0);
虽然上述代码可以编译通过,但是会导致运行时类型转换异常
1.1.5. Java中的一些基本原则
1.2 详解
1.2.1. 基础
泛型深入--01【泛型术语基础知识】【泛型 编译器 字节码】
1.2.2. 反射与泛型
利用反射操作泛型I【与反射+泛型相关的接口类型综述】【Type】【ParameterizedType】
利用反射操作泛型II【TypeVariable】【GenericArrayType】【WildcardType】【Type及其子接口的来历】
利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】
利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】
利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】
利用反射操作泛型VI【泛型类型变量的语义】【GenericDeclaration接口】【泛型接口TypeVariable】【通过Class反射解析泛型类】
2. 注解
3. 集合
4. IO & NIO
5. 反射
04【AccessibleObject类】【反射获取成员字段】
6.序列化
JAVA序列化基础知识Serializable与Externalizable的区别
7. AOP && IoC(DI)
gradle_plugin_android_aspectjx
IoC:将组件对象的创建和管理转移出去,由外部组件负责,实现方式一般有两种:依赖查找和依赖注入
依赖注入(DI):一般有以下几种实现方式
a、接口注入
b、构造器注入
c、set方法注入
d、注解注入