CN110990050B - 一种模型类属性值打印控制方法、装置、介质和设备 - Google Patents
一种模型类属性值打印控制方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN110990050B CN110990050B CN201911167626.0A CN201911167626A CN110990050B CN 110990050 B CN110990050 B CN 110990050B CN 201911167626 A CN201911167626 A CN 201911167626A CN 110990050 B CN110990050 B CN 110990050B
- Authority
- CN
- China
- Prior art keywords
- attribute
- class
- type
- return value
- data
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种模型(model)类属性值打印控制方法、装置、介质和设备。包括:目标程序中的所有model类定义一个父类,将该父类的属性定义为空或者是所有model类的共有属性,通过JAVA的反射机制以及递归算法,获取一个model类中每个属性的属性值,将每个属性及其属性值进行Stringbuffer类型的数据组装后,将所有组装的数据以字符串类型返回,实现model类属性值打印。本发明方案将每个属性及其属性值组装为Stringbuffer类型的数据,无需频繁开辟空间存储临时数据,可以有效节省内存,通过反射机制和递归算法获取每个属性的属性值,代码书写量较小,且无需引入第三方jar包,系统负荷较小。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种模型(model)类属性值打印控制方法、装置、介质和设备。
背景技术
在JAVA的开发过程中,对象model类是必不可少的,model类可以用于数据的保存、传值、对比等,model类的基本结构可以如图1所示。
在与数据库的交互过程中,model类更是必不可少,一个数据库表往往对应一个或者多个model类,一个中小型的项目往往至少拥有几十个甚至上百个model类,一个model类的属性少则数十个,多则五六十个。在查询数据库、或者接收到数据后,可能需要将一个model类的属性值以日志的形式打印出来,但是JAVA默认打印的并不是属性值,而是该model类的全类名以及在内存的地址值,JAVA默认打印的内容可以如图2所示。
其原因是JAVA默认打印model类属性值的“toString方法”,默认的就是打印model类的全类名以及在内存中的地址值。所以想要打印出model类的属性值,就必须重写“toString方法”。重写“toString方法”常用的方法有以下三种:
1、直接用加号“+”连接,如图3所示。
这种方法的优点是工具自动生成;
缺点是实现方式是多个字符串的连接,由于JAVA对字符串的处理机制,这种方式会占用大量的内存。
2、使用字符串缓存(StringBuffer)类型的附加(append)方法,如图4所示。
这种方法的优点是占用少量内存;
缺点是无法自动生成,如果model类属性太多,书写浪费时间。
3、使用第三方归档文件(jar)包,如图5所示。
这种方法的优点是书写简单、快速;
缺点是需要引用第三方jar包,如果是单纯地为了实现打印model类属性值功能而引用一个第三方jar包,会有些累赘,增大系统负荷。
综上所述,现有的打印model类属性值的方法,要么占用内存多,要么书写复杂,要么需要引入第三方的jar包,增加系统负荷。
发明内容
本发明实施例提供一种model类属性值打印控制方法、装置、介质和设备,用于解决现有的model类属性值打印方法,占用内存多、书写复杂或系统负荷大的问题。
本发明提供了一种model类属性值打印控制方法,为目标程序中的所有model类预先定义一个父类,该父类的属性为空或者将所有model类的共有属性加入该父类,所述方法包括:
通过反射机制获取一个model类的类对象的属性;
获取每个属性的属性值,并将每个属性及其属性值组装为Stringbuffer类型的数据;
利用反射机制判断所述model类是否存在父类,如果存在父类,且该父类为预先定义的父类或预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该存在的父类的类对象的属性;如果不存在父类,或存在的父类不是预先定义的父类也不是预先定义的父类的子类,则将所有组装的数据以字符串类型返回,作为打印输出。
本发明还提供了一种model类属性值打印控制装置,为目标程序中的所有model类预先定义一个父类,该父类的属性为空或者将所有model类的共有属性加入该父类,所述装置包括:
属性获取模块,用于通过反射机制获取一个model类的类对象的属性;
属性值数据获取模块,用于获取所述属性获取模块获取的每个属性的属性值,并将每个属性及其属性值组装为Stringbuffer类型的数据;
父类属性值数据模块,用于利用反射机制判断所述model类是否存在父类,如果存在父类,且该父类为预先定义的父类或预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该存在的父类的类对象的属性;如果不存在父类,或存在的父类不是预先定义的父类也不是预先定义的父类的子类,则触发返回模块;
返回模块,用于将所有组装的数据以字符串类型返回,作为打印输出。
本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有可执行程序,该可执行程序被处理器执行实现如上所述的方法。
本发明还提供了一种model类属性值打印控制设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存储的程序时,实现如上所述的方法步骤。
根据本发明提供的方案,可以为目标程序中的所有model类定义一个父类,将该父类的属性定义为空或者是所有model类的共有属性,并可以通过JAVA的反射机制以及递归算法,获取一个model类中每个属性的属性值,将每个属性及其属性值进行Stringbuffer类型的数据组装后,将所有组装的数据以字符串类型返回,实现model类属性值打印。本发明方案将每个属性及其属性值组装为Stringbuffer类型的数据,无需频繁开辟空间存储临时数据,可以有效节省内存,通过反射机制和递归算法获取每个属性的属性值,代码书写量较小,且无需引入第三方jar包,系统负荷较小。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术提供的model类的基本结构示意图;
图2为现有技术提供的JAVA默认打印的内容的示意图;
图3为现有技术提供的重写“toString方法”的示意图;
图4为现有技术提供的重写“toString方法”的示意图;
图5为现有技术提供的重写“toString方法”的示意图;
图6为本发明实施例一提供的model类属性值打印控制方法的流程示意图;
图7为本发明实施例二提供的model类属性值打印控制方法的流程示意图;
图8为本发明实施例三提供的model类属性值打印控制装置的结构示意图;
图9为本发明实施例三提供的model类属性值打印控制设备的结构示意图。
具体实施方式
鉴于现有的重写“toString方法”的方法存在的问题,本案发明人考虑通过JAVA自身的反射机制和递归算法来实现“toString方法”重写。通过为目标程序中的所有model类定义一个父类,可以通过反射机制获取model类及父类的属性、方法和方法返回值等,而通过递归算法可以有效减少代码书写量。且本发明实施例提供的方案,还具有占用内存少,系统负荷小的优点。
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一
本发明实施例一提供一种model类属性值打印控制方法,该方法的步骤流程可以如图6所示,包括:
步骤101、获取属性。
需要说明的是,本实施例提供的方法实现的前提是,为目标程序中的所有model类定义一个父类,该父类的属性为空或者将所有model类的共有属性加入该父类。
则,在本步骤中,可以通过反射机制获取一个model类的类对象的属性。
步骤102、获取属性值数据。
在本步骤中,可以进一步获取步骤101中获取的每个属性的属性值,并可以将每个属性及其属性值组装为Stringbuffer类型的数据。
在一种可能的实现方式中,本步骤中可以包括:针对每个获取的属性,根据该属性对应的获取(get)方法,获取返回值;根据返回值是否为空(null),以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为Stringbuffer类型的数据。
将每个属性及其返回值组装为Stringbuffer类型的数据,可以理解为将每个属性及其返回值组装为Stringbuffer类型的指定格式的数据。指定格式可以为任意格式,例如,指定格式为属性=返回值格式,或者,指定格式为属性:返回值格式。
例如,在一种可能的实现方式中,以指定格式为属性=返回值格式为例,根据返回值是否为空,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的Stringbuffer类型的数据,可以包括:
针对每个获取的属性,确定该属性对应的get方法,利用确定出的get方法获取返回值;
若返回值为空,则组装为属性=null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串(String),则组装为属性=返回值格式的数据;
若返回值的类型为列表(List)类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性=List值格式的数据;如果泛型类型为本实施例中定义的model类的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,可以理解为重新执行步骤101,该父类作为步骤101中的model类;如果泛型类型为本实施例中定义的model类的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性,可以理解为重新执行步骤101,该子类作为步骤101中的model类;
若返回值的类型为本实施例中定义的model类的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,可以理解为重新执行步骤101,该父类作为步骤101中的model类,若返回值的类型为本实施例中定义的model类的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性,可以理解为重新执行步骤101,该子类作为步骤101中的model类。
又如,在一种可能的实现方式中,以指定格式为属性:返回值格式为例,根据返回值是否为空,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的Stringbuffer类型的数据,可以包括:
针对每个获取的属性,确定该属性对应的get方法,利用确定出的get方法获取返回值;
若返回值为空,则组装为属性:null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串(String),则组装为属性:返回值格式的数据;
若返回值的类型为列表(List)类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性:List值格式的数据;如果泛型类型为本实施例中定义的model类的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,可以理解为重新执行步骤101,该父类作为步骤101中的model类;如果泛型类型为本实施例中定义的model类的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性,可以理解为重新执行步骤101,该子类作为步骤101中的model类;
若返回值的类型为本实施例中定义的model类的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,可以理解为重新执行步骤101,该父类作为步骤101中的model类,若返回值的类型为本实施例中定义的model类的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性,可以理解为重新执行步骤101,该子类作为步骤101中的model类。
步骤103、获取父类的属性值数据。
待打印属性值的model类自身属性处理完之后,在本步骤中,可以进一步利用反射机制判断待打印属性值的model类是否存在父类,如果存在父类,且该父类为本实施例中定义的父类或定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该存在的父类的类对象的属性,可以理解为重新执行步骤101,该父类作为步骤101中的model类;如果不存在父类,或存在的父类不是本实施例中定义的父类也不是本实施例中定义的父类的子类,则可以继续执行步骤104。
步骤104、返回数据。
在本步骤中,可以将所有组装的数据以字符串类型返回,作为打印输出,实现待打印属性值的model类的属性值打印。
需要说明的是,本发明实施例一提供的方法中,通过反射机制获取一个类的类对象的属性之前,还可以将该类以目标(Object)类型接收,并通过获取类对象(getclass)方法获取该类的类对象。
本发明实施例一提供的方案中,可以只引用JAVA语言的软件开发工具包(jdk)中的工具类,无需引用第三方jar包和工具类,具有良好的可复用性。在大大缩减代码书写量的同时,保证了目标程序中model的属性值打印,可以有效减少内存开销。
此外,本实施例提供的方案打印方式灵活,可以根据需要的格式进行Stringbuffer类型的数据组装,只需要做较少的改动,即可以实现属性值打印。例如,由于系统要求不同,对model类属性值的打印格式可能也不同,此时,根据系统要求,可以将数据组装为任意格式。例如,可以将数据组装为“属性=值”的格式,又如,可以将数据组装为“属性:值”的格式。针对属性值为Date类型,可以将数据组装为“属性=*年*月*日”的格式,针对属性值为list类型,可以将数据组装为以下格式:
下面通过实施例二对本发明实施例一提供的方案进行说明。
实施例二
本发明实施例二提供一种model类属性值打印控制方法,为目标程序中的所有model类定义一个父类(假设命名为parent类),该父类的属性为空或者将所有model类的共有属性加入该父类之后,该方法的步骤流程可以如图7所示,包括:
步骤201、通过getclass方法获取类对象。
在本步骤中,可以将传入的类以Object类型接收,并通过getclass方法获取该类的类对象。初始时,传入的类为待打印属性值的model类。
步骤202、通过反射机制获取所有属性。
在本步骤中,可以通过反射机制获取第一步中获取的类对象的所有属性。
步骤203、循环遍历所有的属性,针对每个属性执行步骤204,并在循环遍历结束后,执行步骤205。
步骤204、根据属性确定对应的get方法,通过get方法获取返回值,将属性及其返回值组装为Stringbuffer类型的数据。
例如:
若返回值为空,则组装为“属性=null”格式的数据。
若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型(例如int、double、char、short等)或者为包装类(例如Integer、Double、Long等)或者为String,则组装为“属性=返回值”格式的数据;
若返回值的类型为List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为“属性=List值”格式的数据;如果泛型类型为parent类,则通过递归算法,返回执行步骤201,此时传入的类为parent类;如果泛型类型为parent类的子类,则通过递归算法,返回执行步骤201,此时传入的类为该子类;
若返回值的类型为parent类,则通过递归算法,返回执行步骤201,此时传入的类为parent类,若返回值的类型为parent类的子类,则通过递归算法,返回执行步骤201,此时传入的类为该子类。
步骤205、判断是否有父类。
待打印属性值的model类自身属性处理完之后,在本步骤中,可以进一步利用反射机制判断待打印属性值的model类是否存在父类。
如果存在父类,且该父类为parent类或parent类的子类,则通过递归算法,返回执行步骤201,此时传入的类为该存在的父类;如果不存在父类,或存在的父类不是parent类也不是parent类的子类,则可以继续执行步骤206。
步骤206、返回数据。
在本步骤中,可以将所有组装的数据以字符串类型返回,实现待打印属性值的model类的属性值打印。
与实施例一、二提供的方法对应的,提供以下的装置。
实施例三
本发明实施例三提供一种model类属性值打印控制装置,为目标程序中的所有model类预先定义一个父类,该父类的属性为空或者将所有model类的共有属性加入该父类,该装置的结构可以如图8所示,包括:
属性获取模块11用于通过反射机制获取一个model类的类对象的属性;
属性值数据获取模块12用于获取所述属性获取模块获取的每个属性的属性值,并将每个属性及其属性值组装为Stringbuffer类型的数据;
父类属性值数据模块13用于利用反射机制判断所述model类是否存在父类,如果存在父类,且该父类为预先定义的父类或预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该存在的父类的类对象的属性;如果不存在父类,或存在的父类不是预先定义的父类也不是预先定义的父类的子类,则触发返回模块;
返回模块14用于将所有组装的数据以字符串类型返回,作为打印输出。
所述属性值数据获取模块12具体用于针对每个获取的属性,根据该属性对应的获取get方法,获取返回值;根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为Stringbuffer类型的数据。
所述属性值数据获取模块12进一步具体用于针对每个获取的属性,根据该属性对应的获取get方法,获取返回值;根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的Stringbuffer类型的数据。
在一种可能的实现方式中,所述指定格式为属性=返回值格式,或者,所述指定格式为属性:返回值格式。
所述指定格式为属性=返回值格式时,所述属性值数据获取模块12根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的Stringbuffer类型的数据,包括:
若返回值为空,则组装为属性=null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性=返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性=List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,调用属性获取模块,通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,调用属性获取模块,通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该子类的类对象的属性。
所述指定格式为属性:返回值格式时,所述属性值数据获取模块12根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的Stringbuffer类型的数据,包括:
若返回值为空,则组装为属性:null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性:返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性:List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,调用属性获取模块,通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,调用属性获取模块,通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该子类的类对象的属性。
所述属性获取模块11还用于通过反射机制获取一个类的类对象的属性之前,将该类以目标Object类型接收,并通过获取类对象getclass方法获取该类的类对象。
基于同一发明构思,本发明实施例提供以下的设备和介质。
实施例四
本发明实施例四提供一种model类属性值打印控制设备,该设备的结构可以如图9所示,包括处理器21、通信接口22、存储器23和通信总线24,其中,所述处理器21,所述通信接口22,所述存储器23通过所述通信总线24完成相互间的通信;
所述存储器23,用于存放计算机程序;
所述处理器21,用于执行所述存储器上所存储的程序时,实现本发明实施例一所述的方法步骤。
可选的,所述处理器21具体可以包括中央处理器(CPU)、特定应用集成电路(ASIC,application specific integrated circuit),可以是一个或多个用于控制程序执行的集成电路,可以是使用现场可编程门阵列(FPGA,field programmable gate array)开发的硬件电路,可以是基带处理器。
可选的,所述处理器21可以包括至少一个处理核心。
可选的,所述存储器23可以包括只读存储器(ROM,read only memory)、随机存取存储器(RAM,random access memory)和磁盘存储器。存储器23用于存储至少一个处理器21运行时所需的数据。存储器23的数量可以为一个或多个。
本发明实施例五提供一种非易失性计算机存储介质,所述计算机存储介质存储有可执行程序,当可执行程序被处理器执行时,实现本发明实施例一提供的方法。
在具体的实施过程中,计算机存储介质可以包括:通用串行总线闪存盘(USB,Universal Serial Bus flash drive)、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的存储介质。
在本发明实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性或其它的形式。
在本发明实施例中的各功能单元可以集成在一个处理单元中,或者各个单元也可以均是独立的物理模块。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备,例如可以是个人计算机,服务器,或者网络设备等,或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(universal serial bus flash drive)、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种模型类属性值打印控制方法,其特征在于,为目标程序中的所有模型类预先定义一个父类,该父类的属性为空或者将所有模型类的共有属性加入该父类,所述方法包括:
通过反射机制获取一个模型类的类对象的属性;
针对每个获取的属性,根据该属性对应的获取get方法,获取返回值;
根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据;
所述指定格式为属性=返回值格式,或者,所述指定格式为属性:返回值格式;
利用反射机制判断所述模型类是否存在父类,如果存在父类,且该父类为预先定义的父类或预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该存在的父类的类对象的属性;如果不存在父类,或存在的父类不是预先定义的父类也不是预先定义的父类的子类,则将所有组装的数据以字符串类型返回,作为打印输出;
其中,若所述指定格式为属性:返回值格式时,所述根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据,包括:
若返回值为空,则组装为属性:null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性:返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性:List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性。
2.如权利要求1所述的方法,其特征在于,所述指定格式为属性=返回值格式时,根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据,包括:
若返回值为空,则组装为属性=null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性=返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性=List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性。
3.如权利要求1或2所述的方法,其特征在于,通过反射机制获取一个类的类对象的属性之前,所述方法还包括:
将该类以目标Object类型接收,并通过获取类对象getclass方法获取该类的类对象。
4.一种模型类属性值打印控制装置,其特征在于,为目标程序中的所有模型类预先定义一个父类,该父类的属性为空或者将所有模型类的共有属性加入该父类,所述装置包括:
属性获取模块,用于通过反射机制获取一个模型类的类对象的属性;
属性值数据获取模块,用于针对每个获取的属性,根据该属性对应的获取get方法,获取返回值;
根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据;
所述指定格式为属性=返回值格式,或者,所述指定格式为属性:返回值格式;
父类属性值数据模块,用于利用反射机制判断所述模型类是否存在父类,如果存在父类,且该父类为预先定义的父类或预先定义的父类的子类,则通过递归算法,调用属性获取模块,通过反射机制获取该存在的父类的类对象的属性;如果不存在父类,或存在的父类不是预先定义的父类也不是预先定义的父类的子类,则触发返回模块;
返回模块,用于将所有组装的数据以字符串类型返回,作为打印输出;
其中,若所述指定格式为属性:返回值格式时,所述属性值数据获取模块根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据,具体用于:
若返回值为空,则组装为属性:null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性:返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性:List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性。
5.如权利要求4所述的装置,其特征在于,若所述指定格式为属性:返回值格式时,所述属性值数据获取模块根据返回值是否为空null,以及返回值不为空时,根据返回值的类型,将每个属性及其返回值组装为指定格式的字符串缓存类型的数据,具体用于:
若返回值为空,则组装为属性:null格式的数据;若返回值不为空,则判断返回值的类型:
若返回值的类型为基本数据类型或者为包装类或者为字符串String,则组装为属性:返回值格式的数据;
若返回值的类型为列表List类型,则获取该List类型的泛型类型:如果泛型类型为基本数据类型或者为包装类或者为字符串,则组装为属性:List值格式的数据;如果泛型类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性;如果泛型类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性;
若返回值的类型为预先定义的父类,则通过递归算法,返回执行通过反射机制获取该父类的类对象的属性,若返回值的类型为预先定义的父类的子类,则通过递归算法,返回执行通过反射机制获取该子类的类对象的属性。
6.如权利要求4或5所述的装置,其特征在于,所述属性获取模块还用于:
在通过反射机制获取一个类的类对象的属性之前,将该类以目标Object类型接收,并通过获取类对象getclass方法获取该类的类对象。
7.一种非易失性计算机存储介质,其特征在于,所述计算机存储介质存储有可执行程序,该可执行程序被处理器执行实现权利要求1~3中任一所述的方法。
8.一种模型类属性值打印控制设备,其特征在于,所述设备包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存储的程序时,实现权利要求1~3任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911167626.0A CN110990050B (zh) | 2019-11-25 | 2019-11-25 | 一种模型类属性值打印控制方法、装置、介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911167626.0A CN110990050B (zh) | 2019-11-25 | 2019-11-25 | 一种模型类属性值打印控制方法、装置、介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110990050A CN110990050A (zh) | 2020-04-10 |
CN110990050B true CN110990050B (zh) | 2023-10-13 |
Family
ID=70086571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911167626.0A Active CN110990050B (zh) | 2019-11-25 | 2019-11-25 | 一种模型类属性值打印控制方法、装置、介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110990050B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236574A (zh) * | 2007-01-30 | 2008-08-06 | 国际商业机器公司 | 数据处理系统中模拟处理的方法以及所述数据处理系统 |
CN101966783A (zh) * | 2009-07-27 | 2011-02-09 | 中兴通讯股份有限公司 | 一种交易凭据打印方法及系统 |
CN107330021A (zh) * | 2017-06-20 | 2017-11-07 | 北京神州泰岳软件股份有限公司 | 基于多叉树的数据分类方法、装置及设备 |
CN107451237A (zh) * | 2017-07-26 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 序列化与反序列化方法、装置及设备 |
CN107766039A (zh) * | 2017-10-30 | 2018-03-06 | 中国平安财产保险股份有限公司 | 从Java对象中存取属性值的方法、服务器及存储介质 |
CN108984172A (zh) * | 2018-05-31 | 2018-12-11 | 北京奇艺世纪科技有限公司 | 一种界面文件的生成方法及装置 |
CN109471773A (zh) * | 2018-10-31 | 2019-03-15 | 武汉斗鱼网络科技有限公司 | 一种前端日志多通道输出的方法、装置、服务器及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050093860A1 (en) * | 2003-10-31 | 2005-05-05 | Ryozo Yanagisawa | Information processing apparatus and method, program for executing said method, and storage medium storing said program |
-
2019
- 2019-11-25 CN CN201911167626.0A patent/CN110990050B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236574A (zh) * | 2007-01-30 | 2008-08-06 | 国际商业机器公司 | 数据处理系统中模拟处理的方法以及所述数据处理系统 |
CN101966783A (zh) * | 2009-07-27 | 2011-02-09 | 中兴通讯股份有限公司 | 一种交易凭据打印方法及系统 |
CN107330021A (zh) * | 2017-06-20 | 2017-11-07 | 北京神州泰岳软件股份有限公司 | 基于多叉树的数据分类方法、装置及设备 |
CN107451237A (zh) * | 2017-07-26 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 序列化与反序列化方法、装置及设备 |
CN107766039A (zh) * | 2017-10-30 | 2018-03-06 | 中国平安财产保险股份有限公司 | 从Java对象中存取属性值的方法、服务器及存储介质 |
CN108984172A (zh) * | 2018-05-31 | 2018-12-11 | 北京奇艺世纪科技有限公司 | 一种界面文件的生成方法及装置 |
CN109471773A (zh) * | 2018-10-31 | 2019-03-15 | 武汉斗鱼网络科技有限公司 | 一种前端日志多通道输出的方法、装置、服务器及存储介质 |
Non-Patent Citations (1)
Title |
---|
Ken Arnold.Java编程语言 第3版.2003,第222-241页. * |
Also Published As
Publication number | Publication date |
---|---|
CN110990050A (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111428462B (zh) | 通讯协议模板构建的方法及终端设备 | |
CN108280023B (zh) | 任务执行方法、装置和服务器 | |
CN110928802B (zh) | 基于自动生成用例的测试方法、装置、设备及存储介质 | |
CN107526676B (zh) | 一种跨系统测试方法及装置 | |
CN112765023A (zh) | 测试用例生成方法、装置 | |
CN107330014B (zh) | 一种数据表的创建方法与设备 | |
CN112486490A (zh) | 前端代码打包方法、装置、电子设备及存储介质 | |
CN107122203B (zh) | 一种配置文件的设置方法及装置 | |
CN114816404A (zh) | 动态渲染视图页面的方法、装置、计算机设备及存储介质 | |
CN109669678A (zh) | 模板引擎整合方法、装置、电子设备及存储介质 | |
CN109976751B (zh) | 模型操作方法、相关装置及计算机可读存储介质 | |
CN113705182A (zh) | 一种合同在线生成方法、装置及可读存储介质 | |
CN107291619B (zh) | 内存占用分析方法及装置 | |
CN110990050B (zh) | 一种模型类属性值打印控制方法、装置、介质和设备 | |
CN117743145A (zh) | 一种基于编码模板的测试脚本生成方法、装置及处理设备 | |
US20150055169A1 (en) | Extendable system for preprocessing print document and method for the same | |
CN109408035B (zh) | 一种业务系统的流程配置方法、存储介质和服务器 | |
CN109358919B (zh) | 通用页面的动态配置方法、装置、计算机设备及存储介质 | |
CN113704819B (zh) | 一种应用日志的打码输出方法、装置及计算机可读存储介质 | |
CN112416995B (zh) | 一种数据统计方法、装置、计算机设备及存储介质 | |
CN114416305A (zh) | 一种机器人引擎实现方法、系统及电子设备 | |
CN114741296A (zh) | 单元测试方法、装置、电子设备和存储介质 | |
WO2019028989A1 (zh) | 一种代码分析方法及终端设备 | |
CN109683994B (zh) | 确定视图构建时间的方法、装置、存储介质及电子设备 | |
CN112083952A (zh) | 一种基于spring架构的异常处理方法及系统 |
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 |