文档章节

Java反射实战中文翻译

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

精选30+云产品,助力企业轻松上云!>>>

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
深圳
私信 提问
加载中
请先登录后再评论。
ApacheCN 学习资源汇总 2019.3

【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 微博:@ApacheCN 知乎:@ApacheCN CSDN 简书 OSChina 博客园 We are ApacheCN Open Source ...

ApacheCN_飞龙
2019/03/01
0
0
ApacheCN 学习资源汇总 2019.1

【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者! 合作or侵...

ApacheCN_飞龙
2019/01/29
0
0
ApacheCN 学习资源汇总 2019.1

【主页】 apachecn.org 【Github】@ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 微博:@ApacheCN 知乎:@ApacheCN CSDN 简书 OSChina 博客园 我们不是 Apache 的官方组织/机...

osc_6xoecd1t
2019/01/29
2
0
ApacheCN 学习资源汇总 2018.11

首页地址:www.apachecn.org 关于我们:www.apachecn.org/about 我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者! Java 基础 Java 编程思想 Java Web 和大数...

ApacheCN_飞龙
2018/11/05
0
0
ApacheCN 学习资源汇总 2018.11

首页地址:http://www.apachecn.org 关于我们:http://www.apachecn.org/about 我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者! Java 基础 Java 编程思想 ...

ApacheCN_飞龙
2018/11/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FusionConputer热迁移过程记录

一、迁移原因   云平台集群内存资源不足,已超过设定阈值,内存资源已紧急告警。 二、解决思路   启用新集群,并将老集群中部分虚拟机热迁移至新集群 三、迁移的前提条件   1.被迁移虚...

osc_flwkfqx5
38分钟前
13
0
使用 ServerLess 实现云原生

笔者有幸经历了 IaaS(OS)、CaaS(Container),在这两年又听到了 FaaS(Funtion),这也是运维开发领域里的第三个阶段了吧,今天我将从一个不懂得开发的系统工程师视角以及结合之前的几篇系...

osc_t59f3rc0
40分钟前
18
0
作为软件测试的前辈你能不能给迷茫中的我一点建议?

一、为什么迷茫? 假如前面迷雾一片,作为司机的你,敢踩油门往前冲吗? 大多数人是不敢的。 因为你看不清自己的位置和发展的方向。 同理,一切对未来的恐慌、畏惧、纠结、迷茫,也是因为你看...

osc_auwur47t
42分钟前
12
0
神经机器翻译的直观解释

作者|Renu Khandelwal 编译|VK 来源|Towards Data Science 什么是神经机器翻译? 神经机器翻译是一种将一种语言翻译成另一种语言的技术。一个例子是把英语转换成印地语。让我们想想,如果你在...

osc_u61lmlkv
43分钟前
0
0
用Tableau实现动画数据可视化

作者|PRANAV DAR 编译|VK 来源|Analytics Vidhya 概述 动画可视化是一种艺术,它很容易在Tableau中创造出来 我们将在这里使用开源数据集,并在Tableau中创建自己的动画可视化 介绍 我是动画视...

osc_1oqjcug0
44分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部