CN106933554A - 类转换方法和装置 - Google Patents
类转换方法和装置 Download PDFInfo
- Publication number
- CN106933554A CN106933554A CN201511023820.3A CN201511023820A CN106933554A CN 106933554 A CN106933554 A CN 106933554A CN 201511023820 A CN201511023820 A CN 201511023820A CN 106933554 A CN106933554 A CN 106933554A
- Authority
- CN
- China
- Prior art keywords
- class
- mapper
- source
- conversion
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种类转换方法和装置。其中,该方法包括:获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;获取源类对象和目标类对象之间的映射关系;以及通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。本申请解决了相关技术中两个类之间转换操作较为复杂的技术问题。
Description
技术领域
本申请涉及计算机领域,具体而言,涉及一种类转换方法和装置。
背景技术
在实际开发过程中,经常需要做两个类之间的转换,这两个类通常属于不同领域,例如,分别属于数据库和应用程序,或是属于不同的系统等。这两个类的特点在于非常相似,例如,大部分字段和属性名称相似,只有小部分字段和属性不一致,且进行转换时需要专门的转换逻辑。
对于上述情况,一般都是在代码中手动进行两个类之间的转换,分别将一个对象每个属性值赋给另外一个对象对应的属性值。通常,还需要执行两个类之间的反向转换,反向转换代码和正向转换代码十分类似和重复,只是赋值方向发生变化。如果两个类添加新的属性,需要在正向转换和反向转换中同时添加转化代码,也十分相似。这样代码也无法复用,如果有另外两个类同样需要转换,还需要重复写类似代码。
针对相关技术中两个类之间转换操作较为复杂的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种类转换方法和装置,以解决相关技术中两个类之间转换操作较为复杂的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种类转换方法。该方法包括:获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;获取源类对象和目标类对象之间的映射关系;以及通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。
进一步地,映射器包括成员映射器和类映射器,其中,成员映射器包括源成员名称和目标成员名称,类映射器包括源类、目标类和成员映射器集合,其中,成员映射器集合中各个元素的类型均为成员映射器的类型。
进一步地,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及根据映射关系和各个成员映射器的目标成员名称将各个源成员的值对应地赋值给各个成员映射器的目标成员。
进一步地,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;分别判断各个成员映射器是否存在成员转换方法;对于判断出存在成员转换方法的成员映射器,调用成员转换方法对成员映射器的源成员的值执行转换,得到转换后的源成员的值,并将转换后的源成员的值赋值给对应的目标成员;以及对于判断出不存在成员转换方法的成员映射器,直接将成员映射器的源成员的值赋值给对应的目标成员。
进一步地,映射器还包括集合成员映射器,集合成员映射器包括源中子成员类型和目标中子成员类型,集合成员映射器继承成员映射器,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,并分别对成员映射器集合中各个成员映射器执行如下操作:根据成员映射器的源成员名称获取源成员的值;判断成员映射器是否是集合成员映射器;在判断出成员映射器不是集合成员映射器时,根据映射关系和成员映射器的目标成员名称将源成员的值对应地赋值给成员映射器的目标成员;在判断出成员映射器是集合成员映射器时,遍历源成员的值中各个源成员子项的值,并分别根据集合成员映射器中各个目标中子成员类型创建各个目标成员子项;以及将各个源成员子项的值对应地赋值给各个目标成员子项。
进一步地,类映射器还预先封装有类映射器反转方法,其中,类映射器反转方法用于执行类映射器的反转,反转后的类映射器用于执行目标类至源类的转换,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:调用类映射器反转方法,得到反转后的类映射器;以及通过类转换器根据映射关系和反转后的类映射器将目标类对象转换为源类对象。
为了实现上述目的,根据本申请的另一方面,提供了一种类转换装置。该装置包括:第一获取单元,用于获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;第二获取单元,用于获取源类对象和目标类对象之间的映射关系;以及转换单元,用于通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。
进一步地,映射器包括成员映射器和类映射器,其中,成员映射器包括源成员名称和目标成员名称,类映射器包括源类、目标类和成员映射器集合,其中,成员映射器集合中各个元素的类型均为成员映射器的类型。
进一步地,转换单元包括:获取模块,用于遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及赋值模块,用于根据映射关系和各个成员映射器的目标成员名称将各个源成员的值对应地赋值给各个成员映射器的目标成员。
进一步地,类映射器还预先封装有类映射器反转方法,其中,类映射器反转方法用于执行类映射器的反转,反转后的类映射器用于执行目标类至源类的转换,转换单元包括:调用模块,用于调用类映射器反转方法,得到反转后的类映射器;以及转换模块,用于通过类转换器根据映射关系和反转后的类映射器将目标类对象转换为源类对象。
本申请通过获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;获取源类对象和目标类对象之间的映射关系;以及通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换,解决了相关技术中两个类之间转换操作较为复杂的问题,进而达到了方便快速地实现两个类之间转换的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的类转换方法的流程图;以及
图2是根据本申请实施例的类转换装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于描述,以下对本申请涉及的一些术语和概念进行说明:
类:是面向对象的程序开发语言中一种复杂的数据类型,是将不同类型的数据和与这些数据相关的操作封装在一起的集合体,其中,类是对象的抽象,而对象是类的具体实例。
根据本申请实施例,提供了一种类转换方法。图1是根据本申请实施例的类转换方法的流程图,如图1所示,该方法包括如下的步骤S102至步骤S106:
步骤S102,获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象。
需要说明的是,本申请实施例的源类和目标类可以是任意属于不同领域且存在大部分字段和属性相似的两个类,例如,源类为Java开发语言中的类,目标类为C++开发语言中的类。源类对象和目标类对象分别为需要执行转换的两个类的对象,例如,源类对象为Java开发语言中类Person,包括ID(标识符)、Name(姓名)、Age(年龄)三个成员,目标类对象为C++开发语言中类Person,包括标识符PID(标识符)、PName(姓名)、PAge(年龄)三个成员。
步骤S104,获取源类对象和目标类对象之间的映射关系。
例如,源类对象为Java开发语言中类Person,包括ID(标识符)、Name(姓名)、Age(年龄)三个成员,目标类对象为C++开发语言中类Person,包括标识符PID(标识符)、PName(姓名)、PAge(年龄)三个成员,为了实现源类对象向目标类对象的转换,则需要预先获取源类对象和目标类对象的映射关系,即成员ID与成员PID对应、成员Name与成员PName对应以及成员Age和成员Page对应,从而可以将源类对象每个成员的值对应地赋值给目标类对象的各个成员。
步骤S106,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。
本申请实施例通过获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;获取源类对象和目标类对象之间的映射关系;以及通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换,本申请实施例通过类转换器可以自动实现两个类之间的转换,解决了相关技术中两个类之间转换操作较为复杂的问题,进而达到了方便快速地实现两个类之间转换的效果。
可选地,本申请实施例的映射器包括成员映射器和类映射器,其中,成员映射器包括源成员名称和目标成员名称,类映射器包括源类、目标类和成员映射器集合,其中,成员映射器集合中各个元素的类型均为成员映射器的类型。
本申请实施例的映射器可以是预先定义好的类,在成员映射器中预先定义了源成员名称和目标成员名称等成员,在类映射器中预先定义了源类、目标类和成员映射器集合等成员。需要说明的是,类映射器中的成员映射器集合是指包括多个元素的集合(例如,数组),集合中每个元素的类型均为成员映射器的类型。例如,定义的成员映射器如下:
Class Member{
Public:
String SourName;
String DestName;
};
由上可知,成员映射器Member,即类Member,包括SourName和DestName两个成员,则成员映射器集合可以是:Member Mem[N],其中,数组Mem[N]中各个元素的类型均为Member。
可选地,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及根据映射关系和各个成员映射器的目标成员名称将各个源成员的值对应地赋值给各个成员映射器的目标成员。
在本申请实施例中,遍历成员映射器集合中各个成员映射器,并根据各个成员映射器中的源成员的名称获取各个源成员的值,例如,根据上述源类对象类Person中ID、Name、Age三个成员名称获取ID、Name、Age三个成员的值,从而可以根据源类对象和目标类对象之间的映射关系分别将成员ID的值赋值给成员PID、将成员Name的值赋值给成员PName以及将成员Age的值赋值给成员Page,实现源类对象向目标类对象的转换。
优选地,为了便于不同数据之间的转换,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;分别判断各个成员映射器是否存在成员转换方法;对于判断出存在成员转换方法的成员映射器,调用成员转换方法对成员映射器的源成员的值执行转换,得到转换后的源成员的值,并将转换后的源成员的值赋值给对应的目标成员;以及对于判断出不存在成员转换方法的成员映射器,直接将成员映射器的源成员的值赋值给对应的目标成员。
本申请实施例的成员转换方法可以根据实际需求进行设置,具体地,成员转换方法可以是用于数据类型转换的方法,例如,将布尔值转换为字符串,也可以是按照预设规则进行数据转换的方法,例如,将源成员的值执行哈希运算。
在本申请实施例中,遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值,并判断该成员映射器是否存在成员转换方法,在该成员映射器存在成员转换方法时,调用该成员映射器的成员转换方法对该成员映射器的源成员的值执行转换,得到转换后的源成员的值,并将转换后的源成员的值赋值给对应的目标成员;在判断出该成员映射器不存在成员转换方法时,则可以直接将该成员映射器的源成员的值复制给对应的目标成员。
优选地,映射器还包括集合成员映射器,集合成员映射器包括源中子成员类型和目标中子成员类型,集合成员映射器继承成员映射器,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:遍历成员映射器集合,并分别对成员映射器集合中各个成员映射器执行如下操作:根据成员映射器的源成员名称获取源成员的值;判断成员映射器是否是集合成员映射器;在判断出成员映射器不是集合成员映射器时,根据映射关系和成员映射器的目标成员名称将源成员的值对应地赋值给成员映射器的目标成员;在判断出成员映射器是集合成员映射器时,遍历源成员的值中各个源成员子项的值,并分别根据集合成员映射器中各个目标中子成员类型创建各个目标成员子项;以及将各个源成员子项的值对应地赋值给各个目标成员子项。
实际情况中,在一些类中还会存在集合,为了便于那些存在集合的类的转换,本申请实施例的映射器还包括集合成员映射器,集合成员映射器包括源中子成员类型和目标中子成员类型,集合成员映射器继承成员映射器。
在本申请实施例中,遍历成员映射器集合中各个成员映射器,并分别对成员映射器集合中各个成员映射器执行如下步骤S11至步骤S15:
步骤S11,根据成员映射器的源成员名称获取源成员的值。
步骤S12,判断成员映射器是否是集合成员映射器。
例如,判断该成员映射器中源成员是否为集合,即该成员映射器中源成员是否包含多个子成员,如果该成员映射器中源成员包含多个子成员,即判断出该成员映射器是集合成员映射器,否则该成员映射器不是集合成员映射器。
步骤S13,在判断出成员映射器不是集合成员映射器时,根据映射关系和成员映射器的目标成员名称将源成员的值对应地赋值给成员映射器的目标成员。
本申请实施例在判断出成员映射器不是集合成员映射器时,直接将源成员的值对应地赋值给目标成员。
步骤S14,在判断出成员映射器是集合成员映射器时,遍历源成员的值中各个源成员子项的值,并分别根据集合成员映射器中各个目标中子成员类型创建各个目标成员子项。
步骤S15,将各个源成员子项的值对应地赋值给各个目标成员子项。
具体地,本申请实施例根据各个源成员子项的值、目标成员子项、集合成员映射器、子成员类映射器调用类转换器,执行集合成员映射器中子成员之间的转换。
优选地,为了便于实现类的反向转换,类映射器还预先封装有类映射器反转方法,其中,类映射器反转方法用于执行类映射器的反转,反转后的类映射器用于执行目标类至源类的转换,通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换包括:调用类映射器反转方法,得到反转后的类映射器;以及通过类转换器根据映射关系和反转后的类映射器将目标类对象转换为源类对象。
可选地,本申请实施例的类映射器反转方法可以通过如下步骤S21至步骤S23实现类映射器的反转:
步骤S21,将反转后的类映射器源类设置为反转前的类映射器目标类,目标类设置为源类。
步骤S22,遍历成员映射器集合中各个成员映射器,并调用成员映射器反转方法,生成反转后的成员映射器,加入到反转后的类映射器的成员映射器集合中。
其中,成员映射器反转方法可以通过如下步骤S221至步骤S222实现成员映射器的反转:
步骤S221,将反转后的成员映射器源成员名称设置为反转前的成员映射器目标成员名称,目标成员名称设置为源成员名称。
步骤S222,其他部件值从反转前的成员映射器直接复制到反转后的成员映射器。
步骤S23,其他部件值从反转前的类映射器直接复制到反转后的类映射器。
在本申请实施例中,通过调用类映射器反转方法实现类映射器的反转之后,将目标类对象当作源类对象,源类对象当作目标类对象,以及反转后的类映射器,调用类转换器实现目标类对象向源类对象的转换。
以下以一个实例对本申请实施例的类转换方法进行说明。具体地,在本申请实施例中,预先定义如下映射器和类转换器:
1.定义类映射器:
定义是否包含属性开关;
定义是否包含字段开关;
定义是否包含非共有成员开关;
定义源类;
定义目标类;
定义成员映射器集合;
定义类映射器反转方法,返回反转后的类映射器。
可选地,该类映射器反转方法实现类映射器的反转的过程同上述步骤S21至步骤S23,在此不再赘述。
2.定义成员映射器:
定义源成员名称;
定义目标成员名称;
定义成员转换方法;
定义成员映射器反转方法。
可选地,该成员映射器反转方法实现成员映射器的反转的过程同上述步骤S221至步骤S222,在此不再赘述。
3.定义集合成员映射器,该映射器继承自成员映射器,即包含成员映射器的所有成员,并且还可以定义额外成员:
定义子成员类映射器;
定义源中子成员类型;
定义目标中子成员类型;
定义集合成员映射器反转方法。
其中,该集合成员映射器反转方法可以通过如下步骤S31至步骤S33实现成员映射器的反转:
步骤S31,调用成员映射器反转方法,得到反转后的成员映射器,将其转换为集合成员映射器。
步骤S32,将反转后的集合成员映射器中的源中子成员类型设置为原集合成员映射器中的目标中子成员类型。
步骤S33,将反转后的集合成员映射器中的目标中子成员类型设置为原集合成员映射器中的源中子成员类型。
4.定义类转换器:
定义正向转换方法,即由源类向目标类转换,该正向转换方法的参数为源类对象、目标类对象和类映射器,具体地,正向转换方法通过如下步骤实现源类向目标类转换:
步骤S41,构建获取成员开关。
步骤S42,遍历成员映射器集合,并对成员映射器集合中每个成员映射器执行如下步骤S43。
步骤S43,根据成员映射器的源成员名称和获取成员开关,获取源成员信息,如果获取不到源成员信息,直接跳过;如果获取到了源成员信息,则根据成员信息和源类对象获取该源成员的值。
本申请实施例的源成员信息可以是源成员的元数据。具体地,如果获取到源成员信息,则根据源成员信息和源类对象获取该源成员的值;如果未获取到源成员信息,则直接跳过。
步骤S44,如果成员映射器中定义了成员转换方法,使用成员转换方法将成员映射器的源成员的值进行转换,得到转换后的源成员的值。
具体地,本申请实施例的成员转换方法可以根据实际需求进行设置,具体地,成员转换方法可以是用于数据类型转换的方法,例如,将布尔值转换为字符串,也可以是按照预设规则进行数据转换的方法,例如,将源成员的值执行哈希运算。
步骤S45,判断成员映射器是否是集合成员映射器。
具体地,如果判断出成员映射器不是集合成员映射器,则执行步骤S46,如果判断出成员映射器是集合成员映射器,则执行步骤S47。
步骤S46,根据成员映射器的目标成员名称和获取成员开关,获取目标成员信息,如果获取不到目标成员信息,则直接跳过,如果获取到目标成员信息,则根据目标成员信息和目标类对象,使用源成员的值或转换后的源成员的值设置目标成员的值。
本申请实施例的目标成员信息也可以是目标成员的元数据。
步骤S47,根据成员映射器的目标成员名称和获取成员开关,获取目标成员信息,如果获取不到目标成员信息则直接跳过,如果获取到目标成员信息,使用目标成员信息和目标类对象获取目标成员值。需要说明的是,此时源成员的值和目标成员的值都为集合。具体地,通过如下步骤执行源成员的值赋值给目标成员:
步骤S471,遍历源成员的值中各个源成员子项的值,分别根据集合成员映射器中各个目标中子成员类型创建各个目标成员子项。
步骤S472,根据源成员中子项的值、目标成员子项、集合成员映射器、子成员类映射器调用正向转换方法,执行集合成员映射器中子成员之间的转换。
本申请实施例的类转换器还预先定义了反向转换方法,即由目标类向源类转换,该反向转换方法的参数为源类对象、目标对象类和类映射器。具体地,本申请实施例的反向转换方法调用类映射器的反转方法,得到反转后的类映射器;然后将目标类对象当作源类对象,源类对象当作目标类对象,以及反转后的类映射器,调用正向转换方法实现目标类对象向源类对象的转换。
在完成上述映射器和类转换器的定义之后,本申请实施例即可以利用已经定义好的映射器和类转换器实现源类对象和目标类对象的转换,具体地,本申请实施例的类转换方法包括如下步骤:
步骤S202:将源类对象和目标类对象分别赋值给上述类转换器。
步骤S204:获取源类对象和目标类对象之间的映射关系。
具体地,源类对象和目标类对象之间的映射关系可以通过用户预先定义。
步骤S206:通过本申请实施例的类转换器实现源类对象和目标类对象之间的转换。
从以上的描述中,可以看出,本申请实施例无需手动执行类之间的转换,只需要定义好源类和目标类之间的映射关系,即可自动执行两个类之间的转换,相比于现有技术中在代码中手动进行两个类之间的转换,操作更为方便而且效率更高。此外,本申请实施例的类转换方法可以方便地执行两个类之间的正向转换和反向转换,而不必重复的编写相似代码;而且本申请实施例的类转换方法具有一定的通用性,能够用于不同的两个类之间的转换,例如,Java开发语言中类Person和C++开发语言中类Person之间的转换,Java开发语言中类User和C++开发语言中类User。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例的另一方面,提供了一种类转换装置,该类转换装置可以用于执行本申请实施例的类转换方法,本申请实施例的类转换方法也可以通过本申请实施例的类转换装置来执行。
图2是根据本申请实施例的类转换装置的示意图,如图2所示,该装置包括:第一获取单元10、第二获取单元20和转换单元30。
第一获取单元10,用于获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象。
第二获取单元20,用于获取源类对象和目标类对象之间的映射关系。
转换单元30,用于通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。
本申请实施例通过第一获取单元10获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;第二获取单元20获取源类对象和目标类对象之间的映射关系;以及转换单元30通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换,解决了相关技术中两个类之间转换操作较为复杂的问题,进而达到了方便快速地实现两个类之间转换的效果。
可选地,映射器包括成员映射器和类映射器,其中,成员映射器包括源成员名称和目标成员名称,类映射器包括源类、目标类和成员映射器集合,其中,成员映射器集合中各个元素的类型均为成员映射器的类型。
可选地,转换单元包括:获取模块,用于遍历成员映射器集合,根据成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及赋值模块,用于根据映射关系和各个成员映射器的目标成员名称将各个源成员的值对应地赋值给各个成员映射器的目标成员。
优选地,类映射器还预先封装有类映射器反转方法,其中,类映射器反转方法用于执行类映射器的反转,反转后的类映射器用于执行目标类至源类的转换,转换单元包括:调用模块,用于调用类映射器反转方法,得到反转后的类映射器;以及转换模块,用于通过类转换器根据映射关系和反转后的类映射器将目标类对象转换为源类对象。
所述类转换装置包括处理器和存储器,上述第一获取单元、第二获取单元和转换单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来执行两个类之间的转换。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:获取源类对象和目标类对象,其中,源类对象为源类的对象,目标类对象为目标类的对象;获取源类对象和目标类对象之间的映射关系;以及通过类转换器根据映射关系和映射器执行源类对象和目标类对象之间的转换,其中,类转换器中预先封装了类转换方法,映射器中预先封装了类转换规则,类转换方法用于根据类转换规则执行类之间的转换。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种类转换方法,其特征在于,包括:
获取源类对象和目标类对象,其中,所述源类对象为源类的对象,所述目标类对象为目标类的对象;
获取所述源类对象和所述目标类对象之间的映射关系;以及
通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换,其中,所述类转换器中预先封装了类转换方法,所述映射器中预先封装了类转换规则,所述类转换方法用于根据所述类转换规则执行类之间的转换。
2.根据权利要求1所述的方法,其特征在于,所述映射器包括成员映射器和类映射器,其中,所述成员映射器包括源成员名称和目标成员名称,所述类映射器包括所述源类、所述目标类和成员映射器集合,其中,所述成员映射器集合中各个元素的类型均为所述成员映射器的类型。
3.根据权利要求2所述的方法,其特征在于,通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换包括:
遍历所述成员映射器集合,根据所述成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及
根据所述映射关系和所述各个成员映射器的目标成员名称将所述各个源成员的值对应地赋值给所述各个成员映射器的目标成员。
4.根据权利要求2所述的方法,其特征在于,通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换包括:
遍历所述成员映射器集合,根据所述成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;
分别判断所述各个成员映射器是否存在成员转换方法;
对于判断出存在所述成员转换方法的成员映射器,调用所述成员转换方法对所述成员映射器的源成员的值执行转换,得到转换后的源成员的值,并将转换后的源成员的值赋值给对应的目标成员;以及
对于判断出不存在所述成员转换方法的成员映射器,直接将所述成员映射器的源成员的值赋值给对应的目标成员。
5.根据权利要求2所述的方法,其特征在于,所述映射器还包括集合成员映射器,所述集合成员映射器包括源中子成员类型和目标中子成员类型,所述集合成员映射器继承所述成员映射器,通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换包括:
遍历所述成员映射器集合,并分别对所述成员映射器集合中各个成员映射器执行如下操作:
根据所述成员映射器的源成员名称获取源成员的值;
判断所述成员映射器是否是所述集合成员映射器;
在判断出所述成员映射器不是所述集合成员映射器时,根据所述映射关系和所述成员映射器的目标成员名称将所述源成员的值对应地赋值给所述成员映射器的目标成员;
在判断出所述成员映射器是所述集合成员映射器时,遍历所述源成员的值中各个源成员子项的值,并分别根据所述集合成员映射器中各个目标中子成员类型创建各个目标成员子项;以及
将所述各个源成员子项的值对应地赋值给所述各个目标成员子项。
6.根据权利要求2所述的方法,其特征在于,所述类映射器还预先封装有类映射器反转方法,其中,所述类映射器反转方法用于执行所述类映射器的反转,反转后的类映射器用于执行所述目标类至所述源类的转换,通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换包括:
调用所述类映射器反转方法,得到反转后的类映射器;以及
通过所述类转换器根据所述映射关系和所述反转后的类映射器将所述目标类对象转换为所述源类对象。
7.一种类转换装置,其特征在于,包括:
第一获取单元,用于获取源类对象和目标类对象,其中,所述源类对象为源类的对象,所述目标类对象为目标类的对象;
第二获取单元,用于获取所述源类对象和所述目标类对象之间的映射关系;以及
转换单元,用于通过类转换器根据所述映射关系和映射器执行所述源类对象和所述目标类对象之间的转换,其中,所述类转换器中预先封装了类转换方法,所述映射器中预先封装了类转换规则,所述类转换方法用于根据所述类转换规则执行类之间的转换。
8.根据权利要求7所述的装置,其特征在于,所述映射器包括成员映射器和类映射器,其中,所述成员映射器包括源成员名称和目标成员名称,所述类映射器包括所述源类、所述目标类和成员映射器集合,其中,所述成员映射器集合中各个元素的类型均为所述成员映射器的类型。
9.根据权利要求8所述的装置,其特征在于,所述转换单元包括:
获取模块,用于遍历所述成员映射器集合,根据所述成员映射器集合中各个成员映射器的源成员名称获取各个源成员的值;以及
赋值模块,用于根据所述映射关系和所述各个成员映射器的目标成员名称将所述各个源成员的值对应地赋值给所述各个成员映射器的目标成员。
10.根据权利要求8所述的装置,其特征在于,所述类映射器还预先封装有类映射器反转方法,其中,所述类映射器反转方法用于执行所述类映射器的反转,反转后的类映射器用于执行所述目标类至所述源类的转换,所述转换单元包括:
调用模块,用于调用所述类映射器反转方法,得到反转后的类映射器;以及
转换模块,用于通过所述类转换器根据所述映射关系和所述反转后的类映射器将所述目标类对象转换为所述源类对象。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201511023820.3A CN106933554A (zh) | 2015-12-30 | 2015-12-30 | 类转换方法和装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201511023820.3A CN106933554A (zh) | 2015-12-30 | 2015-12-30 | 类转换方法和装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN106933554A true CN106933554A (zh) | 2017-07-07 |
Family
ID=59441839
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201511023820.3A Pending CN106933554A (zh) | 2015-12-30 | 2015-12-30 | 类转换方法和装置 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN106933554A (zh) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN109901822A (zh) * | 2019-01-08 | 2019-06-18 | 平安科技(深圳)有限公司 | 对象互转方法、装置及存储介质、服务器 |
| CN109947418A (zh) * | 2019-03-27 | 2019-06-28 | 厦门纳龙科技有限公司 | 一种数据模型转换方法以及装置 |
| CN112148299A (zh) * | 2020-09-16 | 2020-12-29 | 上海中通吉网络技术有限公司 | 字节码对象拷贝方法、装置、设备和存储介质 |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1570862A (zh) * | 2003-04-25 | 2005-01-26 | 微软公司 | 运行时间多态性 |
| CN1786925A (zh) * | 2005-03-08 | 2006-06-14 | 中国科学院软件研究所 | 基于c++映射的ttcn-3测试系统及测试方法 |
| US20080168430A1 (en) * | 2007-01-10 | 2008-07-10 | Bea Systems, Inc. | Open controls |
| CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
| CN103605543A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 验证属性转换方法和装置 |
| CN104731911A (zh) * | 2015-03-24 | 2015-06-24 | 浪潮集团有限公司 | 一种数据表与实体类的动态映射及转换方法 |
-
2015
- 2015-12-30 CN CN201511023820.3A patent/CN106933554A/zh active Pending
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1570862A (zh) * | 2003-04-25 | 2005-01-26 | 微软公司 | 运行时间多态性 |
| CN1786925A (zh) * | 2005-03-08 | 2006-06-14 | 中国科学院软件研究所 | 基于c++映射的ttcn-3测试系统及测试方法 |
| US20080168430A1 (en) * | 2007-01-10 | 2008-07-10 | Bea Systems, Inc. | Open controls |
| CN102830975A (zh) * | 2012-08-15 | 2012-12-19 | 深圳市翌日科技有限公司 | 一种汇编语言到高级语言的代码转换方法和装置 |
| CN103605543A (zh) * | 2013-11-19 | 2014-02-26 | 北京国双科技有限公司 | 验证属性转换方法和装置 |
| CN104731911A (zh) * | 2015-03-24 | 2015-06-24 | 浪潮集团有限公司 | 一种数据表与实体类的动态映射及转换方法 |
Non-Patent Citations (1)
| Title |
|---|
| WEIXIN_30588827: "AutoMapper(一)——实现数据契约和实体类之间的转换", 《HTTPS://BLOG.CSDN.NET/WEIXIN_30588827/ARTICLE/DETAILS/99776677》 * |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN109901822A (zh) * | 2019-01-08 | 2019-06-18 | 平安科技(深圳)有限公司 | 对象互转方法、装置及存储介质、服务器 |
| CN109901822B (zh) * | 2019-01-08 | 2022-08-12 | 平安科技(深圳)有限公司 | 对象互转方法、装置及存储介质、服务器 |
| CN109947418A (zh) * | 2019-03-27 | 2019-06-28 | 厦门纳龙科技有限公司 | 一种数据模型转换方法以及装置 |
| CN112148299A (zh) * | 2020-09-16 | 2020-12-29 | 上海中通吉网络技术有限公司 | 字节码对象拷贝方法、装置、设备和存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Percy et al. | Plant–insect interactions: double-dating associated insect and plant lineages reveals asynchronous radiations | |
| CN105094754B (zh) | 基于标签的程序开发方法、页面请求响应方法及其装置 | |
| CN109358851A (zh) | 图表组件的创建方法、装置及计算机可读存储介质 | |
| CN110309289A (zh) | 一种句子生成方法、句子生成装置及智能设备 | |
| CN107729230A (zh) | 一种基于控件模式下的web自动化测试装置及测试方法 | |
| CN112036577B (zh) | 基于数据形式的应用机器学习的方法、装置和电子设备 | |
| CN109710340A (zh) | 软件工具调用方法及装置、软件工具封装方法及装置 | |
| Sulistiarini | Representing knowledge base into database for WAP and web-based expert system | |
| CN105511873A (zh) | 用户界面控件展示方法及装置 | |
| CN106302442A (zh) | 一种基于Java语言的网络通讯数据包解析方法 | |
| CN106873952B (zh) | 移动端网页开发的数据处理系统和方法、及应用装置 | |
| CN109145235A (zh) | 用于解析网页的方法、装置及电子设备 | |
| CN109754072A (zh) | 网络离线模型的处理方法、人工智能处理装置及相关产品 | |
| CN109408699A (zh) | 一种同步缓存zTree树实现树节点快速检索的方法 | |
| CN109245996A (zh) | 邮件推送方法、装置、计算机设备和存储介质 | |
| CN109032590A (zh) | 一种可视化开发环境的配置方法、装置、终端及存储介质 | |
| CN113094355A (zh) | 基于国产化通信协议的模型实例化方法、装置、设备及介质 | |
| CN107508698B (zh) | 雾计算中基于内容感知和带权图的软件定义服务重组方法 | |
| CN107679141A (zh) | 数据入库方法、装置、设备及计算机可读存储介质 | |
| US6842888B2 (en) | Method and apparatus for hierarchically restructuring portions of a hierarchical database based on selected attributes | |
| CN109657125A (zh) | 基于网络爬虫的数据处理方法、装置、设备及存储介质 | |
| CN110858160B (zh) | 资源调度方法及装置、存储介质和处理器 | |
| CN102411589A (zh) | 一种监控和管理关键词的方法和设备 | |
| CN110532448A (zh) | 基于神经网络的文档分类方法、装置、设备及存储介质 | |
| CN101604328A (zh) | 一种互联网信息垂直搜索方法 |
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 | ||
| CB02 | Change of applicant information | ||
| CB02 | Change of applicant information |
Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing Applicant after: Beijing Guoshuang Technology Co.,Ltd. Address before: 100086 Cuigong Hotel, 76 Zhichun Road, Shuangyushu District, Haidian District, Beijing Applicant before: Beijing Guoshuang Technology Co.,Ltd. |
|
| RJ01 | Rejection of invention patent application after publication | ||
| RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170707 |