8月6日 泛型的使用(转载)

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中的一些基本原则

a. 实例化一个对象必须知道其确切的类型,对于数组那其元素类型必须是确定的

1.2 详解

1.2.1. 基础

01.【泛型概述】【泛型类】

02.【泛型方法】【泛型接口】【泛型限定的基本使用】

泛型深入--01【泛型术语基础知识】【泛型 编译器 字节码】

泛型深入--02【参数化类型的特点】

泛型深入--03【泛型知识补充】【类型推断】

泛型通配符

泛型通配符限定

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. 注解

01【注解的基本概念及分类】【Java元注解】

02【注解的基本知识】【Java内建注解】

03【自定义注解】【为注解添加属性】

04【利用反射操作注解对象】

3. 集合

4. IO & NIO

NIO系列教程

IO系列教程

深入分析 Java I/O 的工作机制

5. 反射

01【反射机制】【反射的应用场景】

02【Class类对象】【Class对象的获取方式】

03【反射获取构造方法】

04【AccessibleObject类】【反射获取成员字段】

05【反射获取成员方法】

06【数组的数据类型】【数组数据类型的父类】

07【含有数组参数的成员方法的反射】【数组的反射】

6.序列化

JAVA序列化基础知识Serializable与Externalizable的区别

7. AOP && IoC(DI)

gradle_plugin_android_aspectjx

深入理解Android之AOP

IoC:将组件对象的创建和管理转移出去,由外部组件负责,实现方式一般有两种:依赖查找和依赖注入

依赖注入(DI):一般有以下几种实现方式

a、接口注入

b、构造器注入

c、set方法注入

d、注解注入

控制反转

猜你喜欢

转载自blog.csdn.net/Percy0618/article/details/81448734