文档章节

Java反射实战中文翻译

phli
 phli
发布于 2015/10/14 23:37
字数 909
阅读 28
收藏 0
点赞 0
评论 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
深圳
彻底明白编译型和解释型、动态语言和静态语言区别

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

chenxuxu ⋅ 05/19 ⋅ 0

Java基础|Java特性与HelloWorld运行流程

【Java基础】 Java语言特点:(着重了解两个)开源、跨平台。 跨平台如何实现:通过JVM实现,JVM充当Java和不同OS之间的翻译器,不同OS对应不同JVM。 Java语言的平台:JavaSE、JavaME(Androi...

darlingwood2013 ⋅ 05/29 ⋅ 0

【转载保存】Ubuntu14.04安装pycharm用于Python开发环境部署,并且支持pycharm使用中文输入

转载自:http://www.cnblogs.com/chentq/p/4975794.html 作者: 刍狗 一、目标 实现在Linux下用pycharm调试工具/Python开发 Linux使用vi/vim工具写Python,缺点:调试不方便,无代码提示、跳...

大连瓦匠 ⋅ 2017/10/12 ⋅ 0

Java基础教程:tutorialspoint-spring mvc

教程: 来自turorialspoint的Spring MVC 4.1.6教程(英文),官网:https://www.tutorialspoint.com/springmvc/index.htm 离线版本:(链接: https://pan.baidu.com/s/1hsvL7wS 密码: vg7x)......

easonjim ⋅ 2017/08/28 ⋅ 0

轻量精准全文搜索服务器 - ftserver

FTServer(FTS)是一个轻量精准全文搜索服务器,使用英文规则处理英文,使用中文规则处理中文,不需要切割中文为单词,可以支持中文字的任意排列,精准搜索中文长句子,轻松处理古文古诗词,写...

iBoxDB ⋅ 2016/02/14 ⋅ 4

关注这些技术号,你将拥有半个互联网圈

“ IT 行业技术变更周期越来越快,作为技术人最重要的是持续学习,现在的学习途径有很多,我们到底该如何做出选择? 我觉得最重要有两方面:第一,需要保持良好的技术视野,持续关注行业内技...

g6u8w7p06dco99fq3 ⋅ 04/18 ⋅ 0

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一、问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二、解决办...

Qiu_CJ ⋅ 04/12 ⋅ 0

Win10系统下eclipse的基本配置 编码格式 classpath原理 import工作机制

eclipse是用来编译java文件的一个软件 国内也有汉化版,我也不知道该怎么上传……忘了从哪里搞来了 不过用了一段时间就还原原来的配置了因为网上的教程之类的方法都是英文版的 为了和网上的配...

codingcoge ⋅ 03/17 ⋅ 0

spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500

问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json数据报错:no convertter for retur...

陈守印 ⋅ 06/15 ⋅ 0

Openstack 简体中文汉化

安装软件包 Java代码 apt-get install gettext 把openstack_dashboard简体中文汉化.rar解压 把../openstack_dashboard/django.po上传到 /usr/share/openstack-dashboard/openstackdashboard/......

mecisery ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 28分钟前 ⋅ 0

数据仓库技术概述(一看就是架构师写的,对我极其有用)

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于...

gulf ⋅ 30分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 31分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 35分钟前 ⋅ 0

vue获取input输入框的数据

用惯了jQuery,突然使用vue感觉很不习惯,有很多不同的地方,感觉是两个不同的思想来写前端的代码。jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作。而Vue则是通过...

王子城 ⋅ 37分钟前 ⋅ 0

竟然这就是面向对象的游戏设计?!

从程序角度考虑,许多 JavaScript 都基于循环和大量的 if/else 语句。在本文中,我们可了解一种更聪明的做法 — 在 JavaScript 游戏中使用面向对象来设计。本文将概述原型继承和使用 JavaSc...

柳猫 ⋅ 42分钟前 ⋅ 2

git cmd git bash

刚用到了Git,看到windows环境下有两个命令输入窗口 第一个是可视化图形界面,第二个是CMD,第三个是Bash。 Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的...

东东笔记 ⋅ 44分钟前 ⋅ 0

分布式系统CAP和Base

1、分布式系统 1.1 简介 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的...

xixingzhe ⋅ 55分钟前 ⋅ 0

查看磁盘占用情况

记一次jenkins构建失败的问题 Build step 'Send build artifacts over SSH' changed build result to UNSTABLE 网上查资料都没明确表明是什么错,回忆之前处理这样的问题。第一时间想到的是不...

ManderSF ⋅ 57分钟前 ⋅ 0

数据库管理提速:SQL解析的探索与应用

前言: SQL解析是一项复杂的技术,一般都是由数据库厂商来掌握,当然也有公司专门提供SQL解析的API。SQL解析与优化是属于编译器范畴,和C语言等其他语言的解析没有本质的区别。其中分为词法分...

java高级架构牛人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部