文档章节

Java反射实战中文翻译

phli
 phli
发布于 2015/10/14 23:37
字数 909
阅读 35
收藏 0

link:https://www.gitbook.com/book/lawr/jreflection

Chapter 1. 一些基本概念

我们通常会遇到一些可以用反射轻松及优雅地解决的问题。没有反射机制,我们的解决方式会显得杂乱、累赘和脆弱。例如下面的场景:

1.你的项目经理提出一个可插拔的框架,并知道系统在生成和部署之后还需要接受新的组件。
你创建了一些接口并准备了一个给你的jar包打补丁的方法,但不能完全满足可插拔的需要。
2.在花费了数个月去部署一个客户端应用后,市场营销人员告诉你用另一种远程机制能够提高
销量。即使做转换是一个好的商业策略,你现在得重新实现所有远程接口。
3.你的模块的公用接口只想接收来自特定包的调用,以免他人错误使用你的模块。你为每一个
API增加了一个参数来保存调用类的包名。但是这样做,合法的调用方得修改他们的调用了,并
且不合法的调用方可以伪造一个包名来调用你的API。

这些场景分别说明了模块化、远程调用和安全,并且看起来没有相似之处。然而它们有这样的共同点:每个场景都需要做出改变,并且需要得由基于程序架构的决策和代码修改来满足。

重新实现接口、给JAR打补丁或者修改方法调用是单调乏味和机械的。乏味到你可以写一个算法来描述必须的步骤:

1、检查程序的结构和数据。 2、根据检查结果做方案 3、根据方案修改程序的行为、结构或数据

尽管对于程序员的你这些步骤看起来满熟悉的,但你无法想象一个程序来完成这些任务。于是你假定修改代码得由一个坐着敲代码的人来完成,而不是在机器里跑着的程序。等学习了反射之后,你可以抛弃这个假想,并让程序帮你做这些调整了。举下面一个简单的例子:

public class HelloWorld {
    public void printName() {
        System.out.println(this.getClass().getName());
    }
}

该行

(new HelloWorld()).printName();

发送字符串 HelloWorld 到标准输出。设 x 为HelloWorld类或其子类的一个实例,这一语句

x.printName();

发送了该类名称的字符串到标准输出。 这一简单的例子比它看上去的要激动人心。它包含了前面所说的每一个步骤。printName 方法检查了这个对象的类(this.getClass())这样,应该输出什么的决策就转交给了这一对象的类。该方法依据决策来执行——输出类的名称。不需要通过重载,printName方法就可以为不同的子类做出和与HelloWorld类不同的表现。这一方法很灵活,它可以适应继承它的类,并产生表现得变化。在后续我们会利用更复杂的例子来介绍使用反射来获得灵活性的方法。


© 著作权归作者所有

共有 人打赏支持
phli
粉丝 0
博文 4
码字总数 2048
作品 0
深圳
私信 提问
图说 Java:理解 Java 机制最受欢迎的 8 幅图

世间总是一图胜过千万言,下面的8幅图来自于 Program Creek 的 Java教程 ,目前这是该网站最受欢迎的文章. 希望本文能帮你回顾你已经知道的那些知识。如果图片讲解的不够清晰,你可能需要阅读详...

大数据之路
2013/10/30
0
3
彻底明白编译型和解释型、动态语言和静态语言区别

编译型和解释型的区别 先来看看编译型语言定义: 编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)。 再来看看解释型语言的定义: 解释型语言的源代码不是直接翻译成机...

chenxuxu
05/19
0
0
NetBeans Weekly 刊号 # 41 - Jan 13, 2009

原文链接:http://blog.csdn.net/vanessa219/article/details/3769483

晨曦之光
2012/03/09
0
0
细说 Java 中的字符和字符串( 二 )

原文出处:BuquTianya 我们上次在《细说Java中的字符和字符串(一)》说了Java中char和中文字符之间的关系,说明了char能不能存储一个中文字符,以及如何判断Java的字符串是否包含中文字符。...

BuquTianya
06/30
0
0
Tomcat中文乱码问题的原理和解决方法

Tomcat中文乱码问题的原理和解决方法   自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。   一、Java中文问题的由...

孙斐
2013/02/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---光的特性

电磁频谱 颜色的心理学特征

中国龙-扬科
20分钟前
2
0
android音频及强噪相关

Android AudioRecord和AudioTrack介绍(Android音频收集和播放 麦克风降噪) https://blog.csdn.net/tanningzhong/article/details/72844559 音频采集(AudioRecorder) https://www.jianshu.......

whoisliang
26分钟前
2
0
redis-持久化

RDB rdb持久化是把当前进程数据生成快照保存到磁盘的过程。触发RDB持久化过程分为手动触发和自动触发。 触发机制 bgsave执行流程 rdb优缺点 AOF 记录每次写命令,重启时再重新执行aof文件中的...

grace_233
31分钟前
3
0
电话激活Windows 中文操作系统步骤

已购买微软MAK批量授权,系统又在企业内网中,无法通过连接Internet进行激活,还可以通过电话完成激活。 前期准备 请提前准备好产品密钥,Product Key格式如下:XXXXX-XXXXX-XXXXX-XXXXX-XXX...

tonyfox
33分钟前
4
0
Apache用户认证,域名跳转,访问日志

Apache用户认证 当设置了用户认证后,用户访问网站时,需要输入用户名和密码才能访问。 可以全局设置,也可以为某几个虚拟主机单独配置。 下面以全局配置进行操作示例。 编辑httpd.conf进行配...

野雪球
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部