CN113312038B - 一种生成Java代码类继承结构的实现方法 - Google Patents
一种生成Java代码类继承结构的实现方法 Download PDFInfo
- Publication number
- CN113312038B CN113312038B CN202110677818.7A CN202110677818A CN113312038B CN 113312038 B CN113312038 B CN 113312038B CN 202110677818 A CN202110677818 A CN 202110677818A CN 113312038 B CN113312038 B CN 113312038B
- Authority
- CN
- China
- Prior art keywords
- class
- directory
- interface
- inheritance
- java
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000010586 diagram Methods 0.000 claims abstract description 26
- 230000007246 mechanism Effects 0.000 claims abstract description 12
- 238000012545 processing Methods 0.000 claims description 5
- FGUUSXIOTUKUDN-IBGZPJMESA-N C1(=CC=CC=C1)N1C2=C(NC([C@H](C1)NC=1OC(=NN=1)C1=CC=CC=C1)=O)C=CC=C2 Chemical compound C1(=CC=CC=C1)N1C2=C(NC([C@H](C1)NC=1OC(=NN=1)C1=CC=CC=C1)=O)C=CC=C2 FGUUSXIOTUKUDN-IBGZPJMESA-N 0.000 claims description 2
- 238000011161 development Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 3
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种生成Java代码类继承结构的实现方法,属于Java软件开发技术领域,本发明利用Java提供的Class动态加载机制,对指定目录下的字节码文件进行读取,利用反射机制获取类和接口的信息,并构建继承实现结构图,然后将该结构以图形化的方式直观地呈现给用户。
Description
技术领域
本发明涉及Java软件开发技术领域,尤其涉及一种生成Java代码类继承结构的实现方法。
背景技术
在开源世界中,优秀的开源项目层出不穷,这些项目由世界各地的开发者共同构建而成。而在企业项目开发中,很多团队都会或多或少地使用开源框架提高自己的开发效率,其中有一些项目是直接在开源项目的基础上进行修改,以适应项目的需要。在这个过程中,就需要开发者理解开源框架的设计架构与具体的内部逻辑。很多开源项目出于各种需要,设计了很复杂的代码架构,这对于使用者来说,需要花费很多时间去逐步理解。对于一些开发者来说,直接阅读源码容易让人感到困惑,但如果有文档、图表等内容进行辅助阅读,就能更容易地理解代码结构。然而有些开源项目的文档并不是很齐全,而且文档更多地倾向于帮助开发者使用项目而不是理解项目的代码结构。虽然部分IDE提供了插件用于生成项目的结构图,但仍有部分开发者使用的开发工具不具备这样的功能。对于这部分开发者,需要一些工具对项目的代码结构进行整理,并以更直观的方式进行呈现。
发明内容
为了解决以上技术问题,本发明提供了一种生成Java代码类继承结构的实现方法,用于生成目标Java项目的类继承结构和接口实现结构,以直观的图形化方式进行呈现。帮助开发者加快理解Java开源项目或已有Java项目的代码结构,提高开发效率。
本发明的技术方案是:
一种生成Java代码类继承结构的实现方法,利用Java提供的Class动态加载机制,对指定目录下的字节码文件进行读取,利用反射机制获取类和接口的信息,并构建继承实现结构图,然后将该结构以图形化的方式直观地呈现给用户。
进一步的,
包括:
A、通过jar包运行:
i.生成一个目录下单个class或interface的继承实现结构图:
java–jar diagram.jar class字节码所在目录Class或Interface全限定名
ii.生成某个目录下所有class或interface的继承实现结构图:
java–jar diagram.jar class字节码所在目录
B、IDE运行:
iii.生成一个目录下单个class或interface的继承实现结构图:
运行参数:diagram.jar class字节码所在目录Class或Interface全限定名
iv.生成某个目录下所有class或interface的继承实现结构图:
运行参数:class字节码所在目录。
进一步的,
继承与实现结构图使用有向无环图进行存储,通过邻接链表实现。
进一步的,
具体步骤如下:
a)读取命令行参数;
b)构造URLClassLoader对象;url为目标目录;
c)构造有向无环图,生成Object节点。其中,顶点用HashMap保存,边用自定义的链表结构保存;
d)构造待处理全限定名List classNameList;
e)依次处理classNameList中的class或interface。
f)图形化输出继承结构图。
再进一步的,
步骤a)中的参数包括字节码所在目录、目标class或interface的全限定名。
步骤d)中,根据启动参数进行相应处理,若需要获取目标目录下所有class文件的结构信息,则需要遍历目标目录,根据目录结构和文件名拼接全限定名。
步骤e)中,通过URLClassLoader获取Class对象,获取其父类或者实现的接口,向有向无环图中添加一个节点,然后递归处理其父类或实现的接口,直到遇见Object或已加入图中的节点为止。
步骤f)中,通过抽象接口采用命令行字符输出的形式,打印结构图。
本发明的有益效果是
本发明利用Java提供的class动态加载以及反射机制,获取Java项目中的类和接口的继承和实现关系,并以图形化的形式进行呈现,帮助开发者方便快捷地理解Java项目的代码结构,提高开发效率。
本发明使用Java语言开发,在安装有Java运行时的环境下就能运行,不需要依赖特定IDE等第三方工具,便于开发者使用。
本发明提供了图形化输出接口,开发者可以提供自己的图形化输出实现。
附图说明
图1是邻接链表示意图;
图2是操作步骤示意图;
图3是使用有向无环图进行存储示意图;
图4是图形化输出继承结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种生成Java代码类继承结构的实现方法,以一种便捷获取Java项目的类继承结构与接口实现结构的方式,为Java开发者阅读源码、理解项目的架构设计提供帮助。
本发明利用Java原生提供的特性进行实现。
1)通过动态类加载机制加载目标字节码;
2)通过反射机制获取目标Class对象。
本发明以有向无环图作为数据结构存储结构图。
1)使用邻接链表实现。
2)提供了多种图形化输出支持。
一、相关技术:
a)Java class动态加载机制;
b)Java反射机制;
c)有向无环图。
二、使用方法:
A、通过jar包运行:
v.生成某个目录下单个class或interface的继承实现结构图:
java–jar diagram.jar class字节码所在目录Class或Interface全限定名
vi.生成某个目录下所有class或interface的继承实现结构图:
java–jar diagram.jar class字节码所在目录
B、IDE运行:
vii.生成某个目录下单个class或interface的继承实现结构图:
运行参数:diagram.jar class字节码所在目录Class或Interface全限定名
viii.生成某个目录下所有class或interface的继承实现结构图:
运行参数:class字节码所在目录
三、实现步骤:
为了获取class和interface的继承与实现结构,需要利用Java提供的反射机制,通过class和interface的Class对象,获取其父类或实现的接口名称,而为了获取Class对象,则需要通过ClassLoader动态加载目标字节码文件。
其中,继承与实现结构图使用有向无环图进行存储,通过邻接链表实现。虽然Java只支持类的单继承,可以使用树形结构进行存储,但一个类可以实现多个接口,意味着一个节点可以有多个父节点,同时类与接口之间的继承与实现关系不可能出现环路,因此这里使用有向无环图进行存储。Object类是图中的起始节点。如图3所示(注意,图中的箭头方向代表同时代表继承与实现关系,并未与UML类图对应,此处仅用作有向无环图的说明)
邻接链表图示如图1。
具体步骤如图2:
b)读取命令行参数。包括字节码所在目录、目标class或interface的全限定名;
c)构造URLClassLoader对象。url为目标目录;
d)构造有向无环图,生成Object节点。其中,顶点用HashMap保存,边用自定义的链表结构保存;
e)
f)构造待处理全限定名List classNameList。根据启动参数进行相应处理,若需要获取目标目录下所有class文件的结构信息,则需要遍历目标目录,根据目录结构和文件名拼接全限定名;
g)依次处理classNameList中的class或interface。通过URLClassLoader获取Class对象,获取其父类或者实现的接口,向有向无环图中添加一个节点,然后递归处理其父类或实现的接口,直到遇见Object或已加入图中的节点为止。
h)图形化输出继承结构图。通过抽象接口可以有多种图形化实现。这里采用命令行字符输出的形式,打印结构图,如图4所示。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (7)
1.一种生成Java代码类继承结构的实现方法,其特征在于,
利用Java提供的Class动态加载机制,对指定目录下的字节码文件进行读取,利用反射机制获取类和接口的信息,并构建继承实现结构图,然后将该结构以图形化的方式直观地呈现给用户;
包括:
A、通过jar包运行:
i.生成一个目录下单个class或interface的继承实现结构图:
java –jar diagram.jar class字节码所在目录 Class或Interface全限定名;
ii. 生成一个目录下所有class或interface的继承实现结构图:
java –jar diagram.jar class字节码所在目录;
B、IDE运行:
iii. 生成一个目录下单个class或interface的继承实现结构图:
运行参数:diagram.jar class字节码所在目录 Class或Interface全限定名;
iv. 生成某个目录下所有class或interface的继承实现结构图:
运行参数:class字节码所在目录。
2.根据权利要求1所述的方法,其特征在于,
继承与实现结构图使用有向无环图进行存储,通过邻接链表实现。
3.根据权利要求2所述的方法,其特征在于,
具体步骤如下:
a)读取命令行参数;
b)构造URLClassLoader对象;url为目标目录;
c)构造有向无环图,生成Object节点;其中,顶点用HashMap保存,边用自定义的链表结构保存;
d)构造待处理全限定名List classNameList;
e)依次处理classNameList中的class或interface;
f)图形化输出继承结构图。
4.根据权利要求3所述的方法,其特征在于,
步骤a)中的参数包括字节码所在目录、目标class或interface的全限定名。
5.根据权利要求3所述的方法,其特征在于,
步骤d)中,根据启动参数进行相应处理,若需要获取目标目录下所有class文件的结构信息,则需要遍历目标目录,根据目录结构和文件名拼接全限定名。
6.根据权利要求3所述的方法,其特征在于,
步骤e)中, 通过URLClassLoader获取Class对象,获取其父类或者实现的接口,向有向无环图中添加一个节点,然后递归处理其父类或实现的接口,直到遇见Object或已加入图中的节点为止。
7.根据权利要求3所述的方法,其特征在于,
步骤f)中,通过抽象接口采用命令行字符输出的形式,打印结构图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110677818.7A CN113312038B (zh) | 2021-06-18 | 2021-06-18 | 一种生成Java代码类继承结构的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110677818.7A CN113312038B (zh) | 2021-06-18 | 2021-06-18 | 一种生成Java代码类继承结构的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113312038A CN113312038A (zh) | 2021-08-27 |
CN113312038B true CN113312038B (zh) | 2022-05-31 |
Family
ID=77379246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110677818.7A Active CN113312038B (zh) | 2021-06-18 | 2021-06-18 | 一种生成Java代码类继承结构的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113312038B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1124183A1 (en) * | 2000-02-10 | 2001-08-16 | S.A. Solventas | Method for managing globally distributed software components |
US6654932B1 (en) * | 1999-08-03 | 2003-11-25 | International Business Machines Corporation | Validating data within container objects handled by view controllers |
CN103593222A (zh) * | 2013-09-29 | 2014-02-19 | 中国人民解放军第二炮兵装备研究院科研试验中心 | 一种逆向提取Java软件程序类图的方法 |
CN104221002A (zh) * | 2012-01-31 | 2014-12-17 | 甲骨文国际公司 | 用于实现到web服务的公用数据接口的方法和系统 |
CN108446105A (zh) * | 2018-02-08 | 2018-08-24 | 广州亦云信息技术股份有限公司 | 一种轻量级API Server开发框架及开发方法 |
CN109901841A (zh) * | 2019-03-01 | 2019-06-18 | 太仓市同维电子有限公司 | 一种查看java字节码时显示方法调用关系图的方法 |
CN110929165A (zh) * | 2019-12-17 | 2020-03-27 | 云南大学 | 一种基于JAVA Doc知识图谱的多维评估推荐方法 |
CN112905636A (zh) * | 2021-03-31 | 2021-06-04 | 浙江太美医疗科技股份有限公司 | 数据操作方法、服务器和计算机可读介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2370658A (en) * | 2000-12-29 | 2002-07-03 | Metadyne Ltd | A modular software framework |
US6804686B1 (en) * | 2002-04-29 | 2004-10-12 | Borland Software Corporation | System and methodology for providing fixed UML layout for an object oriented class browser |
US7770158B2 (en) * | 2004-10-14 | 2010-08-03 | Bea Systems, Inc. | Source code translator |
CN104331275B (zh) * | 2014-08-26 | 2018-10-12 | 大唐微电子技术有限公司 | 一种Java卡及其应用打补丁的方法 |
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
US9886249B2 (en) * | 2015-11-16 | 2018-02-06 | Sap Se | Universal transcompiling framework |
-
2021
- 2021-06-18 CN CN202110677818.7A patent/CN113312038B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6654932B1 (en) * | 1999-08-03 | 2003-11-25 | International Business Machines Corporation | Validating data within container objects handled by view controllers |
EP1124183A1 (en) * | 2000-02-10 | 2001-08-16 | S.A. Solventas | Method for managing globally distributed software components |
CN104221002A (zh) * | 2012-01-31 | 2014-12-17 | 甲骨文国际公司 | 用于实现到web服务的公用数据接口的方法和系统 |
CN103593222A (zh) * | 2013-09-29 | 2014-02-19 | 中国人民解放军第二炮兵装备研究院科研试验中心 | 一种逆向提取Java软件程序类图的方法 |
CN108446105A (zh) * | 2018-02-08 | 2018-08-24 | 广州亦云信息技术股份有限公司 | 一种轻量级API Server开发框架及开发方法 |
CN109901841A (zh) * | 2019-03-01 | 2019-06-18 | 太仓市同维电子有限公司 | 一种查看java字节码时显示方法调用关系图的方法 |
CN110929165A (zh) * | 2019-12-17 | 2020-03-27 | 云南大学 | 一种基于JAVA Doc知识图谱的多维评估推荐方法 |
CN112905636A (zh) * | 2021-03-31 | 2021-06-04 | 浙江太美医疗科技股份有限公司 | 数据操作方法、服务器和计算机可读介质 |
Non-Patent Citations (3)
Title |
---|
Visual Tracing System for Novice Programmers of Java Applets Using Aspect-Oriented Programming;Masayuki Arai;<2009 International Conference on Computational Intelligence and Software Engineering>;20091228;全文 * |
一种构建Java 语言扩展的编译器框架;张昱;《计算机工程》;20071031;第33卷(第19期);全文 * |
基于JavaWeb的项目代码生成工具在教学中的改革与实现;郝文菊等;《电脑编程技巧与维护》;20200418(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113312038A (zh) | 2021-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10579344B2 (en) | Converting visual diagrams into code | |
US8745584B2 (en) | Dependency injection by static code generation | |
US8924944B2 (en) | Implementation of distributed methods that support generic functions | |
US9841953B2 (en) | Pluggable components for runtime-image generation | |
US7904484B2 (en) | Incremental packaging | |
US20120110444A1 (en) | Help Document Animated Visualization | |
US11288062B2 (en) | Automatic source code refactoring | |
US11474796B1 (en) | Build system for distributed applications | |
JP2013516701A (ja) | 漸進的変化を伴う効率的な不変構文表現 | |
Kaliszyk et al. | Towards knowledge management for HOL Light | |
US9524153B1 (en) | Optimized compiling of a template function | |
Kolovos et al. | The epsilon pattern language | |
Seibel et al. | Traceability in model-driven engineering: Efficient and scalable traceability maintenance | |
CN113312038B (zh) | 一种生成Java代码类继承结构的实现方法 | |
US8806465B2 (en) | Refactor exception class hierarchy for reduced footprint and faster application start | |
US10635416B2 (en) | Property filtering | |
CN103116514A (zh) | 基于系统扩展调用图的操作系统自动优化方法和系统 | |
US9720660B2 (en) | Binary interface instrumentation | |
Rukmono et al. | Enabling analysis and reasoning on software systems through knowledge graph representation | |
CN112882698A (zh) | 开发环境的生成方法及装置、计算机存储介质及电子设备 | |
US20100251212A1 (en) | Version Type Traversal | |
US20230153079A1 (en) | Visual representations of source code portions in integrated development environments | |
Tattersall et al. | PIPE–The Great Re-Plumbing | |
Greiner et al. | Evaluating Multi-variant Model-To-Text Transformations Realized by Generic Aspects | |
Santos et al. | Increasing Quality in Scenario Modelling with Model-Driven Development |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |