- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用 ASM 实现 Java 语言的“多重继承”
12-8-27 使用 ASM 实现 Java 语言的“多重继承”
使用 ASM 实现 Java 语言的“多重继承”
问题的提出
在大部分情况下 ,需要多重继承往往意味着糟糕的设计。但在处理一些遗留项 目的时候 ,多重继
承可能是我们能做出的选择中代价最小的。由于 Java 语言本身不支持多重继承 ,这常常会给我
们带来麻烦 ,最后的结果可能就是大量的重复代码。本文试图使用 ASM 框架来解决这一问题。
在扩展类的功能的同时 ,不产生任何重复代码。
考虑如下的实际情况 :有一组类 ,名为 SubClass1、SubClass2、SubClass3 和 SubClass4 ,它
们共同继承了同一个父类 SuperClass。现在 ,我们需要这组类中的一部分 ,例如 SubClass1 和
SubClass2 ,这两个类还要实现另外两个接口 ,它们分别为 :IFibonacciComputer 和
ITimeRetriever。然而 ,这两个接口已经有了各 自的实现类 FibonacciComputer 和
TimeRetriever。并且这两个类的实现逻辑就是我们想要的 ,我们不想做任何改动 ,只希望在
SubClass1 和 SubClass2 两个类中包含这些实现逻辑。
它们的结构如图 1 所示 :
图 1. 结构类图
由于 SubClass1,SubClass2 已经继承了 SuperClass ,所以我们无法让它们再继承
FibonacciComputer 或 TimeRetriever。
所以 ,想要它们再实现 IFibonacciComputer 和 ITimeRetriever 这两个接口 ,必然会产生重复代
码。
下面 ,我们就使用 ASM 来解决这个问题。
回页首
Java class 文件格式以及类加载器介绍
/developerworks/cn/java/j-lo-asm/index.html 1/16
12-8-27 使用 ASM 实现 Java 语言的“多重继承”
在后面的内容中 ,需要对 Java class 文件格式以及类加载器的知识有一定的了解 ,所以这里先
对这些内容做一个简单介绍 :
class 文件格式
Java class 文件的结构如图 2 所示 (图中“*”表示出现 0 次或任意多次 ) :
图 2.Java class 文件结构
详细说明如下 :
Magic Number: 每个 class 文件的前 4 个字节被称为“魔数” ,它的内容为 :0xCAFEBABE。
魔数的作用在于可以轻松地分辨出一个文件是不是 class 文件。
Version: 该项指明该 class 文件的版本号。
Constant Pool: 常量池是 class 文件中结构最为复杂 ,也最为重要的部分。常量池包含了与
文件中类和接口相关的常量。常量池中存储了诸如文字字符串 ,final 变量值。Java 虚拟机把
常量池组织为入口列表的形式。常量池中许多入口都指向其他的常量入口 ,而且 class 文件中
紧随着常量池的许多条 目也都会指向常量池的入口。除了字面常量之外 ,常量池还可以容纳以
下几种符号引用 :类和接口的全限定名 ,字段的名称和描述符和方法的名称和描述符等。
Modifiers: 该项指明该文件中定义的是类还是接口 ,以及声明中用了哪种修饰符 ,类或接口
是私有的 ,还是公共的 ,类的类型是否是 final 的 ,等等。
This class: 该项是对常量池的索引。在这个位置 ,Java 虚拟机能够找到一个容纳了类或接
口全限定名的入口。这里需要注意的是 :在 class 文件中 ,所有类的全限定名都是以内部名称
形式表示的。内部名称是将原先类全限定名中的“.”替换为“/”。例如 :j ava.lang.String 的内部
名称为 j ava/lang/String。
Super Class: 该项也是对常量池的索引 ,指明了该类超类的内部名称。
Int
您可能关注的文档
- 从《汉书》称《诗》论定《毛诗序》基本完成于《史记》之前兼答张启成先生的商榷.pdf
- 从公共性视角出发探索校园文化活动中心的空间塑造以重庆大学文化活动中心投标方案为例.pdf
- 从中泰两国文字差异看泰国学生汉字书写偏误--以泰国尖竹汶职业技术学院为例.pdf
- 从北京奥运会看体育展示系统的发展兼论体育展示与智能化系统的关系.pdf
- 从国际比较看中国个人所得税发挥再分配功能的改革思路.pdf
- 从城市规划环境影响评价看规划环评与建设项目环评的区别.pdf
- 从敦煌结社活动探讨人的群体性以及个体与集体的关系.pdf
- 从梁济 quot;自沉 quot;看中国近代遗老的文化心态.pdf
- 从梁济“自沉”看中国近代遗老的文化心态.pdf
- 从八皇后问题的解决方案看面向过程和面向对象.pdf
文档评论(0)