Java Reflection in Java zh
简介
第一章 基础
1.1 反射的值命题
1.2 程序员 George 的任务
1.2.1 选择反射
1.2.2 实现反射方案
1.3 检查运行时的程序
1.4 在运行时查询方法
1.5 使用 Class 对象表示类型
1.5.1 表示原始类型
1.5.2 表示接口
1.5.3 表示数组类型
1.6 理解 Method 对象
1.6.1 使用动态调用
1.6.2 使用原始类型进行动态调用
1.6.3 避开调用陷阱
1.7 为反射建模
1.8 浏览继承层次
1.8.1 自省继承层次
1.8.2 意外之处
1.8.3 另外一种反射循环
1.9 总结
第二章 通过反射读取字段
2.1 序列化对象
2.1.1 序列化为 XML
2.1.2 选择反射
2.1.3 使用反射设计序列化
2.2 在运行时查找字段
2.3 理解 Filed 对象
2.4 获取、设置字段值
2.5 检查限定符
2.5.1 Member 接口
2.5.2 接口自省的陷阱
2.5.3 对实例变量进行自省
2.6 访问非公有成员
2.7 处理数组
2.8 序列化:完整版
2.8.1 序列化所有组件
2.8.2 序列化实例变量
2.9 使用反射序列化
2.10 总结
第三章 动态加载与反射构造
3.1 George 的部署难题
3.1.1 使用设计模式进行设计
3.1.2 实现反射解决方案
3.1.3 通过反射增强工厂方法
3.1.4 结合委托与反射的优势
3.2 动态加载类
3.2.1 forName 基础
3.2.2 获取数组类
3.2.3 原始类型与 forName
3.3 反射构造对象
3.3.1 反射构造基础
3.3.2 使用构造对象
3.3.3 反射构造数组
3.4 设计动态加载
3.4.1 通过参数反射构造的缺点
3.4.2 通过接口初始化
3.5 实现反序列化
3.5.1 初始化反序列化器
3.5.2 构造实例
3.5.3 恢复对象结构
3.6 George 的序列化:局限
3.6.1 无法与 readObject 或 writeObject 交互
3.6.2 未处理 final 类型的实例变量
3.6.3 只有无参构造器
3.6.4 未处理非法 XML 字符
3.6.5 性能
3.7 总结
第四章 使用 Java 动态代理
第五章 调用栈内省
第六章 使用类加载器
第七章 反射代码生成
第八章 设计模式
第九章 评估性能
第十章 反射未来展望
Powered by
GitBook
2.1.2 选择反射
2.1.2 选择反射
George 比较了几种设计方案,最后决定使用反射,其他方案及其缺点如下:
每个类强制实现一个
toXML
方法。
该方法返回对象的 XML 序列化版本。
需要修改所有类,无法用于第三方类。
使用第三方序列化库,它使用预处理器、代码生成或者源代码到源代码的转换来实现序列化。
学习曲线陡峭。
不易调试。
使用第三方库,它通过一个
映射文件
实现序列化。
映射文件需要手动修改。
使用反射则没有以上问题,不会侵入现有代码,而且可用于第三方类库。
results matching "
"
No results matching "
"