Java反射实战中文翻译
博客专区 > phli 的博客 > 博客详情
Java反射实战中文翻译
phli 发表于2年前
Java反射实战中文翻译
  • 发表于 2年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 时不时地会接触到Java的反射却没有仔细钻研过,Java Reflection in Action这本书有比较详细的讲解。并没有看到它的中译版因此试着一边翻译一边学习。进度不会很快,陆续在gitbook上写吧,写书真不容易越来越佩服写作的人了。

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类不同的表现。这一方法很灵活,它可以适应继承它的类,并产生表现得变化。在后续我们会利用更复杂的例子来介绍使用反射来获得灵活性的方法。


标签: Java 反射 翻译
共有 人打赏支持
粉丝 0
博文 4
码字总数 2048
×
phli
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: