CN113312038B - 一种生成Java代码类继承结构的实现方法 - Google Patents

一种生成Java代码类继承结构的实现方法 Download PDF

Info

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
Application number
CN202110677818.7A
Other languages
English (en)
Other versions
CN113312038A (zh
Inventor
张兆林
张宏原
杨继伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202110677818.7A priority Critical patent/CN113312038B/zh
Publication of CN113312038A publication Critical patent/CN113312038A/zh
Application granted granted Critical
Publication of CN113312038B publication Critical patent/CN113312038B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical 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软件开发技术领域,尤其涉及一种生成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)中,通过抽象接口采用命令行字符输出的形式,打印结构图。
CN202110677818.7A 2021-06-18 2021-06-18 一种生成Java代码类继承结构的实现方法 Active CN113312038B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (8)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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