CN118012400A - 针对程序的方法集合获取方法和装置 - Google Patents
针对程序的方法集合获取方法和装置 Download PDFInfo
- Publication number
- CN118012400A CN118012400A CN202410171181.8A CN202410171181A CN118012400A CN 118012400 A CN118012400 A CN 118012400A CN 202410171181 A CN202410171181 A CN 202410171181A CN 118012400 A CN118012400 A CN 118012400A
- Authority
- CN
- China
- Prior art keywords
- class
- target program
- program
- methods
- target
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 263
- 230000007246 mechanism Effects 0.000 claims abstract description 29
- 238000012544 monitoring process Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 230000006399 behavior Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000000051 modifying effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请一个或多个实施例提供一种针对程序的方法集合获取方法和装置,所述方法包括:在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。本申请可以可以提高程序设计的效率,降低程序设计的成本,并且可以避免统计到程序实际并未使用的类所包含的方法,从而可以提高后续的程序评估的准确度。
Description
技术领域
本申请一个或多个实施例涉及计算机技术领域,尤其涉及一种针对程序的方法集合获取方法和装置。
背景技术
面向对象编程(Object Oriented Programming)是一种程序设计范式,它将一组具有一定的方法的数据属性组织成一个基本单元,称为对象。面向对象编程以对象为核心,认为程序由一系列对象组成。对象之间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。通常,面向对象编程语言(例如:Java)是基于类的,这意味着类将数据属性和方法定义为创建对象的模板,而这些对象则是类的实例。
在程序设计的过程中,为了评估程序在代码上的变动对程序已经实现的功能的影响,实现针对程序的更加精细化的管理,通常需要梳理出程序中所有类所包含的所有方法的集合。而具体如何获得程序中所有类所包含的所有方法的集合,也就成为了亟待解决的问题。
发明内容
本申请一个或多个实施例提供技术方案如下:
本申请提供一种针对程序的方法集合获取方法,所述方法包括:
在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;
在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;
基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
可选地,获取被加载的与所述目标程序对应的至少一个类,包括:
对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类。
可选地,所述目标程序中创建了用于对与所述目标程序对应的类加载器进行监听的监听器;
所述对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类,包括:
基于所述监听器对所述类加载器进行监听,以在所述类加载器加载与所述目标程序对应的至少一个类中的各个类时,获取所述各个类。
可选地,所述获取被加载的与所述目标程序对应的至少一个类,包括:
获取被加载的与所述目标程序对应的至少一个类中的各个类,并将所述各个类的类信息记录到与所述目标程序对应的类信息表中。
可选地,所述基于反射机制获取所述至少一个类中的各个类所包含的方法,包括:
遍历所述类信息表,并针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法。
可选地,所述针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法,包括:
针对与遍历到的类信息对应的目标类,基于遍历到的类信息,获取与所述目标类对应的类对象,并进一步地获取所述类对象所包含的方法。
可选地,所述基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合,包括:
确定所述至少一个类中的各个类所包含的方法中是否存在方法名相同的多个方法,如果是,则获取所述多个方法中的各个方法的方法参数,并进一步地确定是否存在方法参数相同的多个方法,如果是,则将方法参数相同的多个方法更新为一个方法;
基于更新后的所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
本申请还提供一种针对程序的方法集合获取装置,所述装置包括:
第一获取单元,用于在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;
第二获取单元,用于在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;
生成单元,用于基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
本申请还提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述任一项所述方法的步骤。
本申请还提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述任一项所述方法的步骤。
在上述技术方案中,可以在目标程序运行时,获取被加载的与目标程序对应的至少一个类,并在目标程序运行完成后,基于反射机制获取这至少一个类中的各个类所包含的方法,从而可以基于这至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合。
采用上述方式,一方面,可以实现与程序对应的方法集合的自动获取,而不再需要通过人工统计获取与程序对应的方法集合,因此可以提高程序设计的效率,降低程序设计的成本;另一方面,仅会基于在程序运行时被加载的类所包含的方法生成与程序对应的方法集合,由此可以避免统计到程序实际并未使用的类所包含的方法,从而可以提高后续的程序评估的准确度。
附图说明
下面将对示例性实施例的描述中所需要使用的附图进行说明,其中:
图1是本申请一示例性实施例示出的一种针对程序的方法集合获取方法的流程图。
图2是本申请一示例性实施例示出的一种设备的结构示意图。
图3是本申请一示例性实施例示出的一种针对程序的方法集合获取装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或者相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请一个或多个实施例相一致的所有实施方式。相反,它们仅是与本申请一个或多个实施例的一些方面相一致的例子。
需要说明的是,在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或者更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
在面向对象编程中,类(Class)是一系列具有相同的特征和行为的对象(Object)的集合。每个对象都有各自的静态的特征,在计算机技术中称之为属性(Attribute);每个对象都有各自的动态的行为,在计算机技术中称之为方法(Method)。对象由属性和方法组成,而类则面向对象的数据结构,因此,类的定义包含属性的定义和方法的定义,属性和方法一起构成了类的主体。
对象是类的具体实例。创建对象的过程也叫做类的实例化。在程序中,可以使用类来创建对象,然后使用这些对象调用类中定义的方法,访问或修改对象的属性。一个类可以有多个对象实例,每个对象都有自己的状态(属性值)和行为(方法调用)。
属性也可称为成员变量,用于描述类或对象的特征或状态。它们是类或对象的静态特征,例如颜色、大小、年龄等。在类中,属性通常用来表示对象的状态。在对象被创建时,属性可以被赋予特定的值,从而描述对象的当前状态。
方法也可称为成员函数,用于描述类或对象的行为或操作。它们定义了可以在对象上执行的操作,例如计算、修改状态或产生某些效果。方法可以访问对象的属性,也可以改变对象的状态。通过方法,可以对对象进行操作和控制,实现对象的行为。
在程序设计的过程中,为了评估程序在代码上的变动对程序已经实现的功能的影响,实现针对程序的更加精细化的管理,通常需要统计得到程序中所有类所包含的所有方法的集合。
相关技术中,通常是通过人工统计的方式,来获得程序中所有类所包含的所有方法的集合。然而,这种方式一方面需要耗费大量时间和人力资源,从而影响程序设计的效率和成本,另一方面可能统计到程序实际并未使用的类所包含的方法,这样会给后续的程序评估造成误导。
本申请一个或多个实施例提供一种用于针对程序进行方法集合获取的技术方案。在该技术方案中,可以在目标程序运行时,获取被加载的与目标程序对应的至少一个类,并在目标程序运行完成后,基于反射机制获取这至少一个类中的各个类所包含的方法,从而可以基于这至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合。
采用上述方式,一方面,可以实现与程序对应的方法集合的自动获取,而不再需要通过人工统计获取与程序对应的方法集合,因此可以提高程序设计的效率,降低程序设计的成本;另一方面,仅会基于在程序运行时被加载的类所包含的方法生成与程序对应的方法集合,由此可以避免统计到程序实际并未使用的类所包含的方法,从而可以提高后续的程序评估的准确度。
请参考图1,图1是本申请一示例性实施例示出的一种针对程序的方法集合获取方法的流程图。
如图1所示,上述针对程序的方法集合获取方法具体可以包括以下步骤:
步骤101:在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类。
在实际应用中,程序需要使用的类可以分为两种,其中一种可以是在程序的源代码中直接定义的类,另一种可以是在程序运行时动态加载的类。
在程序的源代码中直接定义的类会在程序的编译阶段被编译成字节码,并且允许编译器在编译阶段进行类型检查和优化,在程序的运行阶段就可以直接将类的字节码加载到内存中。
对于在程序运行时动态加载的类而言,则是在程序的运行阶段动态地生成类的字节码,然后将类的字节码加载到内存中,由此即可实现类的热插拔功能。
不管是在程序的源代码中直接定义的类,还是在程序运行时动态加载的类,任何一个类都只有在程序需要使用这个类时才会被加载,而程序不需要使用的类则不会被加载。
在本实施例中,为了确保针对程序获取的方法集合中的每个方法都是程序实际使用的类所包含的方法,对于待统计的程序(为了便于描述,可称为目标程序)而言,首先可以在目标程序运行时,获取被加载的与目标程序对应的至少一个类,也即,获取目标程序实际使用的至少一个类。
在一些实施例中,在获取被加载的与上述目标程序对应的至少一个类时,具体可以对与目标程序对应的类加载器进行监听,以获取由与目标程序对应的类加载器加载的与目标程序对应的至少一个类。
类加载器(例如:Java中的ClassLoader)负责将类文件加载到内存中,并生成对应的Class对象。类加载器具有以下几个主要的作用:在运行时根据类的全限定名在指定的路径中查找类的字节码文件;将类的字节码文件加载到内存中,并生成对应的Class对象,此过程可以包括读取字节码文件、解析字节码信息、执行静态初始化等步骤;每个类加载器都维护了一个独立的命名空间,加载的类和资源只在该命名空间内可见,从而通过不同的类加载器实现类的隔离;在程序运行时根据需要动态加载特定的类,动态加载类的机制可用于实现插件系统、动态扩展功能等场景;通过自定义类加载器,可以对类的加载过程进行加密、验证等安全策略的实施。
也即,在上述目标程序运行的过程中,与目标程序对应的所有类都可以由与目标程序对应的类加载器进行加载。因此,通过对于目标程序对应的类加载器进行监听,就可以获取与目标程序对应的类加载器加载的与目标程序对应的至少一个类。
进一步地,在一些实施例中,可以在上述目标程序中创建用于对与目标程序对应的类加载器进行监听的监听器。在这种情况下,在对与目标程序对应的类加载器进行监听,以获取由与目标程序对应的类加载器加载的与目标程序对应的至少一个类时,具体可以基于该监听器对与目标程序对应的类加载器进行监听,以在与目标程序对应的类加载器加载与目标程序对应的至少一个类中的各个类时,分别获取这各个类。
监听器(Listener)可以用于在特定事件发生时通知感兴趣的对象,并让其作出相应的处理。监听器的机制主要包括以下几个组成部分:事件源是产生事件的对象,它会在特定条件下触发事件并通知监听器;事件对象封装了事件相关的信息,当事件发生时,事件源会创建相应的事件对象并传递给监听器;监听器接口定义了事件处理方法,通常包括一个或多个回调方法,用于在事件发生时执行相应的处理逻辑;在事件源对象上注册监听器,告诉事件源在事件发生时通知哪些监听器;当事件源触发事件时,它会遍历已注册的监听器列表,调用相应监听器的事件处理方法,将事件对象传递给监听器进行处理。
基于上述监听器的机制,即可在上述目标程序中创建一个用于对与目标程序对应的类加载器进行监听的监听器(可称为ClassLoaderListener)。在与目标程序对应的类加载器进行类的加载时,这个监听器可以被触发,来获取与目标程序对应的类加载器当前加载的类。由此,在与目标程序对应的类加载器加载与目标程序对应的至少一个类中的各个类时,就可以获取这各个类,而在与目标程序对应的类加载器完成与目标程序对应的至少一个类的加载时,就获取到了这至少一个类。
在一些实施例中,在获取被加载的与上述目标程序对应的至少一个类时,具体可以分别获取被加载的与目标程序对应的至少一个类中的各个类,并将各个类的类信息记录到与目标程序对应的类信息表中,以便于后续统计目标程序实际使用的所有类。
在实际应用中,上述类信息可以包括类的名称、类的路径等信息。
步骤102:在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法。
在本实施例中,为了确保获取到上述目标程序实际使用的所有类,可以在目标程序运行完成后,再获取被加载的与目标程序对应的至少一个类中的各个类。
在获取到被加载的与目标程序对应的至少一个类中的任意一个类的情况下,都可以基于反射机制获取这个类所包含的方法,从而就可以获取这至少一个类中的各个类所包含的方法。
反射机制是指在程序运行时动态地获取类的信息、调用类的方法和操作类的属性的能力。具体而言,反射机制允许程序在运行时获取类的元数据(metadata),包括类的名称、方法、属性、注解等信息,以及对这些信息进行操作。通常情况下,反射机制提供了以下功能:获取类的名称、父类、实现的接口、构造函数、方法、属性等信息;通过方法名调用类的方法,甚至可以传递参数并获取返回值;读取和修改类的属性值;动态创建类的实例,而无需在编译时知道类的具体类型。
需要说明的是,对于与上述目标程序对应的至少一个类中的任意一个类而言,具体可以使用目标程序中的反射API,来获取这个类所包含的所有方法。
反射API指的是能够动态地操作类、对象、方法等结构的一组API。通过反射API,程序可以在运行时获取类的信息、调用类的方法、访问类的属性等。使用反射API,可以获取类的信息,包括类的名称、方法、构造函数、字段等;可以通过类的全限定名来创建对象实例;可以通过方法名和参数类型来调用类的方法;可以对类的字段进行读取和写入操作。
在一些实施例中,如前所述,可以将与上述目标程序对应的至少一个类中的各个类的类信息记录到与目标程序对应的类信息表中。在这种情况下,在基于反射机制获取与目标程序对应的至少一个类中的各个类所包含的方法时,具体可以遍历与目标程序对应的类信息表,并针对与遍历到的类信息对应的类(为了便于描述,可称为目标类),基于反射机制获取目标类所包含的方法。
进一步地,在一些实施例中,在针对与遍历到的类信息对应的收拾收拾目标类,基于反射机制获取目标类所包含的方法时,具体可以针对与遍历到的类信息对应的目标类,基于遍历到的类信息(即目标类的类信息),获取与目标类对应的类对象,并进一步地获取与目标类对应的类对象所包含的方法,即可作为目标类所包含的方法。在针对与上述目标程序对应的类信息表的遍历完成后,就可以获取到与目标程序对应的至少一个类中的各个类所包含的方法。
以Java为例,可以使用Class.forName方法来动态加载并返回指定类名对应的类对象。具体而言,Class.forName方法接受一个字符串参数,该参数是要加载的类的完整类名(包括包路径)。当调用Class.forName方法时,它会尝试加载指定类名的类,并返回对应的类对象。如果成功加载了该类,就可以通过对应的类对象进行反射操作,比如创建该类的实例、调用该类的方法等。而在得到了类对象的情况下,可以进一步地使用getMethod方法或getDeclaredMethods方法来获取类对象所包含的方法。其中,getMethod方法用于获取类中特定名称和参数类型的公共方法(包括从父类或接口继承的公共方法);getDeclaredMethods方法用于获取类中定义的所有方法,包括公共方法、保护方法、默认访问权限方法和私有方法,但不包括从父类或接口继承的方法。
步骤103:基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
在本实施例中,在获取到与上述目标程序对应的至少一个类中的各个类所包含的方法的情况下,就可以基于这至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合。
例如,可以预先创建一个与上述目标程序对应的、用于存储方法的集合,该集合的初始状态为空集,后续,在获取到与目标程序对应的至少一个类中的任意一个类所包含的方法的情况下,都可以将这个类所包含的方法添加到该集合中,最终就可以生成与目标程序对应的方法集合,该方法集合中存储了与目标程序对应的至少一个类中的各个类所包含的方法。
在一些实施例中,在基于与上述目标程序对应的至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合时,具体可以先确定这至少一个类中的各个类所包含的方法中是否存在方法名相同的多个方法,如果是,则获取方法名相同的多个方法中的各个方法的方法参数,再进一步地确定方法名相同的多个方法中是否存在方法参数相同的多个方法,如果是,则将方法参数相同的多个方法更新为一个方法,最后可以基于更新后的这至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合。
也即,可以将与上述目标程序对应的至少一个类中的各个类所包含的方法中,名称和参数均相同的多个方法确定为同一个方法。如果两个方法的名称相同,但参数不同,则可能是方法重载,这两个方法不应该被视为同一个方法。
为了避免最终生成的与目标程序对应的方法集合中重复出现同一个方法,对于这至少一个类中的各个类所包含的方法中的名称和参数均相同的多个方法而言,可以仅保留一个方法,而删除多余的方法。
在实际应用中,上述方法集合中存储的可以不是方法本身,而是方法的相关信息,例如:方法名称、方法参数、所在的类等信息。
需要说明的是,在得到了与上述目标程序对应的方法集合后,就可以通过该方法集合确认与目标程序相关的方法,从而可以基于与目标程序相关的方法,评估目标程序在代码上的变动对目标程序已经实现的功能的影响,以及在对目标程序的代码进行重构时对目标程序的原有功能的影响范围,实现针对目标程序的更加精细化的管理。
在上述技术方案中,可以在目标程序运行时,获取被加载的与目标程序对应的至少一个类,并在目标程序运行完成后,基于反射机制获取这至少一个类中的各个类所包含的方法,从而可以基于这至少一个类中的各个类所包含的方法,生成与目标程序对应的方法集合。
采用上述方式,一方面,可以实现与程序对应的方法集合的自动获取,而不再需要通过人工统计获取与程序对应的方法集合,因此可以提高程序设计的效率,降低程序设计的成本;另一方面,仅会基于在程序运行时被加载的类所包含的方法生成与程序对应的方法集合,由此可以避免统计到程序实际并未使用的类所包含的方法,从而可以提高后续的程序评估的准确度。
与前述针对程序的方法集合获取方法的实施例相对应,本申请还提供了针对程序的方法集合获取装置的实施例。
请参考图2,图2是本申请一示例性实施例示出的一种设备的结构示意图。在硬件层面,该设备包括处理器201、内部总线202、网络接口203、内存204以及非易失性存储器205,当然还可能包括所需要的其他硬件。本申请一个或多个实施例可以基于软件方式来实现,比如由处理器201从非易失性存储器205中读取对应的计算机程序到内存204中然后运行。当然,除了软件实现方式之外,本申请一个或多个实施例并不排除其他实现方式,比如逻辑器件或者软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑模块,也可以是硬件或者逻辑器件。
请参考图3,图3是本申请一示例性实施例示出的一种针对程序的方法集合获取装置的框图。
上述针对程序的方法集合获取装置可以应用于图2所示的设备,以实现本申请的技术方案。其中,所述装置包括:
第一获取单元301,用于在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;
第二获取单元302,用于在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;
生成单元303,用于基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
可选地,获取被加载的与所述目标程序对应的至少一个类,包括:
对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类。
可选地,所述目标程序中创建了用于对与所述目标程序对应的类加载器进行监听的监听器;
所述对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类,包括:
基于所述监听器对所述类加载器进行监听,以在所述类加载器加载与所述目标程序对应的至少一个类中的各个类时,获取所述各个类。
可选地,所述获取被加载的与所述目标程序对应的至少一个类,包括:
获取被加载的与所述目标程序对应的至少一个类中的各个类,并将所述各个类的类信息记录到与所述目标程序对应的类信息表中。
可选地,所述基于反射机制获取所述至少一个类中的各个类所包含的方法,包括:
遍历所述类信息表,并针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法。
可选地,所述针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法,包括:
针对与遍历到的类信息对应的目标类,基于遍历到的类信息,获取与所述目标类对应的类对象,并进一步地获取所述类对象所包含的方法。
可选地,所述基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合,包括:
确定所述至少一个类中的各个类所包含的方法中是否存在方法名相同的多个方法,如果是,则获取所述多个方法中的各个方法的方法参数,并进一步地确定是否存在方法参数相同的多个方法,如果是,则将方法参数相同的多个方法更新为一个方法;
基于更新后的所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请的技术方案的目的。
上述实施例阐明的系统、装置、模块或者单元,具体可以由计算机芯片或者实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或者闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或者技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或者其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或者其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或者其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或者其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本申请特定实施例进行了描述。其他实施例在本申请的范围内。在一些情况下,在本申请中记载的动作或者步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本申请一个或多个实施例中所使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。术语“和/或”是指并包含一个或多个相关联的列出项目的任何或者所有可能组合。
在本申请一个或多个实施例中所使用的术语“一个实施例”、“一些实施例”、“示例”、“具体示例”或者“一种实施方式”等的描述意指结合该实施例所描述的具体特征或者特点包含于本申请的至少一个实施例中。对这些术语的示意性描述不必须针对相同的实施例。而且,所描述的具体特征或者特点可以在本申请一个或多个实施例中以合适的方式结合。此外,在不相互矛盾的情况下,可以将不同的实施例以及不同实施例中的具体特征或者特点进行结合。
应当理解,尽管在本申请一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或者“当……时”或者“响应于确定”。
以上所述仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (10)
1.一种针对程序的方法集合获取方法,所述方法包括:
在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;
在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;
基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
2.根据权利要求1所述的方法,获取被加载的与所述目标程序对应的至少一个类,包括:
对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类。
3.根据权利要求2所述的方法,所述目标程序中创建了用于对与所述目标程序对应的类加载器进行监听的监听器;
所述对与所述目标程序对应的类加载器进行监听,以获取由所述类加载器加载的与所述目标程序对应的至少一个类,包括:
基于所述监听器对所述类加载器进行监听,以在所述类加载器加载与所述目标程序对应的至少一个类中的各个类时,获取所述各个类。
4.根据权利要求1所述的方法,所述获取被加载的与所述目标程序对应的至少一个类,包括:
获取被加载的与所述目标程序对应的至少一个类中的各个类,并将所述各个类的类信息记录到与所述目标程序对应的类信息表中。
5.根据权利要求4所述的方法,所述基于反射机制获取所述至少一个类中的各个类所包含的方法,包括:
遍历所述类信息表,并针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法。
6.根据权利要求5所述的方法,所述针对与遍历到的类信息对应的目标类,基于反射机制获取所述目标类所包含的方法,包括:
针对与遍历到的类信息对应的目标类,基于遍历到的类信息,获取与所述目标类对应的类对象,并进一步地获取所述类对象所包含的方法。
7.根据权利要求1所述的方法,所述基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合,包括:
确定所述至少一个类中的各个类所包含的方法中是否存在方法名相同的多个方法,如果是,则获取所述多个方法中的各个方法的方法参数,并进一步地确定是否存在方法参数相同的多个方法,如果是,则将方法参数相同的多个方法更新为一个方法;
基于更新后的所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
8.一种针对程序的方法集合获取装置,所述装置包括:
第一获取单元,用于在目标程序运行时,获取被加载的与所述目标程序对应的至少一个类;
第二获取单元,用于在所述目标程序运行完成后,基于反射机制获取所述至少一个类中的各个类所包含的方法;
生成单元,用于基于所述至少一个类中的各个类所包含的方法,生成与所述目标程序对应的方法集合。
9.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410171181.8A CN118012400A (zh) | 2024-02-06 | 2024-02-06 | 针对程序的方法集合获取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410171181.8A CN118012400A (zh) | 2024-02-06 | 2024-02-06 | 针对程序的方法集合获取方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118012400A true CN118012400A (zh) | 2024-05-10 |
Family
ID=90959118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410171181.8A Pending CN118012400A (zh) | 2024-02-06 | 2024-02-06 | 针对程序的方法集合获取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118012400A (zh) |
-
2024
- 2024-02-06 CN CN202410171181.8A patent/CN118012400A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190324772A1 (en) | Method and device for processing smart contracts | |
CN110389829B (zh) | 多租户环境中扩展对象的分类与分发 | |
CN111782668B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
CN110020542B (zh) | 数据读写方法及装置、电子设备 | |
CN112395483B (zh) | 基于树形结构的页面渲染方法及装置 | |
CN110007920B (zh) | 一种获取代码依赖关系的方法、装置及电子设备 | |
WO2024045382A1 (zh) | 区块链中实现反射机制 | |
CN110032568B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
RU2666237C2 (ru) | Типы неизменяемых объектов | |
US10102047B2 (en) | In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources | |
US20050251719A1 (en) | Test case inheritance controlled via attributes | |
CN109960597B (zh) | 一种应用层接口的动态注册方法及相关装置 | |
US11562024B2 (en) | Method and system for traversing an object graph using traversal context objects | |
US12032970B2 (en) | Reducing the startup latency of functions in a FaaS infrastructure | |
CN114547024A (zh) | 一种sql语句风险检测方法、装置、设备及介质 | |
CN115328458B (zh) | 一种业务应用开发方法及装置 | |
CN108710504A (zh) | 数据库操作方法及装置 | |
CN116628773A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN118012400A (zh) | 针对程序的方法集合获取方法和装置 | |
CN116126711A (zh) | 单元测试方法、装置及电子设备 | |
CN116048731A (zh) | 代码处理方法、装置、电子设备及存储介质 | |
CN112907198B (zh) | 业务状态流转维护方法、装置及电子设备 | |
CN114968422A (zh) | 基于变量状态自动执行合约的方法和装置 | |
CN116700841B (zh) | 一种原生api调用的方法及装置 | |
US7082376B1 (en) | State full test method executor |
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 |