函数调用方法和装置制造方法及图纸

技术编号:12565392 阅读:97 留言:0更新日期:2015-12-23 09:30
本公开是关于一种函数调用方法和装置,通过获取待调用函数在父类或祖先类中的标识,待调用函数在继承父类或祖先类的子类中被覆盖,待调用函数在父类或祖先类中的标识与在子类中的标识不同,以及获取待调用函数在子类中的对象,将父类或祖先类、待调用函数在父类或祖先类中的标识、待调用函数在子类中的对象以及子类中的对象的参数作为非虚函数的调用函数的输入,以通过子类在父类或祖先类中调用待调用函数。本实施例的方法使用JNI接口实现了多层级调用需求,并且JNI接口易于实现,提高了开发效率。

【技术实现步骤摘要】

本公开涉及计算机领域,尤其涉及一种函数调用方法和装置
技术介绍
安卓系统主要使用java语言作为开发语言,java是一门面向对象的开发语言,在Java语言内部,程序以类为单位组织。java中继承是面向对象最显著的一个特征,子类会自动继承父类的函数和变量,在子类中可以调用父类的函数和变量。在继承中将子类和父类中相同函数称为覆盖,这里相同函数是指同名、同参数列表以及同返回类型的函数。在覆盖中只能调用子类中该相同函数,不能使用正常的方法调用父类中该相同函数。
技术实现思路
为克服相关技术中存在的问题,本公开提供一种函数调用方法和装置。根据本公开实施例的第一方面,提供一种函数调用方法,包括:获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;获取所述待调用函数在所述子类中的对象;将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。可选的,所述非虚函数的调用函数为java语言中的CallNonvirtual<Type>Method 函数。可选的,所述获取待调用函数在父类或祖先类中的标识,包括:根据所述父类或祖先类查询哈希表,所述哈希表用于保存类与所述类的各函数的标识的对应关系;若在所述哈希表中查询到所述父类或祖先类的各函数的标识,则根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中确定所述待调用函数在所述父类或祖先类中的标识;若在所述哈希表中没有查询到所述父类或祖先类的各函数的标识,或者,根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中没有获取到所述待调用函数在所述父类或祖先类中的标识,则使用函数标识的获取函数获取所述待调用函数在所述父类或祖先类中的标识,所述函数标识的获取函数的参数为:所述父类或祖先类、所述待调用函数的名字和所述待调用函数的签名;将所述父类或祖先类以及所述待调用函数在所述父类中的标识的对应关系保存到所述哈希表中。可选的,所述函数标识的获取函数为java中的GetMethodID函数。可选的,所述获取待调用函数在父类或祖先类中的标识之前,所述方法还包括:创建所述待调用函数在所述父类或祖先类中的对象,所述父类或祖先类中的对象包括所述待调用函数的名字和所述待调用函数的签名;保存所述待调用函数的名字和所述待调用函数的签名。可选的,所述获取所述待调用函数在所述子类中的对象,包括:根据预先保存的所述待调用函数的名字和所述待调用函数的签名,获取所述待调用函数在所述子类中的对象。根据本公开实施例的第二方面,提供一种函数调用装置,包括:标识获取模块,被配置为获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;对象获取模块,被配置为获取所述待调用函数在所述子类中的对象;调用模块,被配置为将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。可选的,所述非虚函数的调用函数为java语言中的CallNonvirtual<Type>Method 函数。可选的,所述标识获取模块包括:查询子模块,被配置为根据所述父类或祖先类查询哈希表,所述哈希表用于保存类与所述类的各函数的标识的对应关系;确定子模块,被配置为在所述哈希表中查询到所述父类或祖先类的各函数的标识时,根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中确定所述待调用函数在所述父类或祖先类中的标识;获取子模块,被配置为在所述哈希表中没有查询到所述父类或祖先类的各函数的标识,或者,根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中没有获取到所述待调用函数在所述父类或祖先类中的标识时,使用函数标识的获取函数获取所述待调用函数在所述父类或祖先类中的标识,所述函数标识的获取函数的参数为:所述父类或祖先类、所述待调用函数的名字和所述待调用函数的签名;所述函数调用装置还包括:第一保存模块,被配置为将所述父类或祖先类以及所述待调用函数在所述父类中的标识的对应关系保存到所述哈希表中。可选的,所述函数标识的获取函数为java中的GetMethodID函数。可选的,所述函数调用装置还包括:创建模块,被配置为创建所述待调用函数在所述父类或祖先类中的对象,所述父类或祖先类中的对象包括所述待调用函数的名字和所述待调用函数的签名;第二保存模块,被配置为保存所述待调用函数的名字和所述待调用函数的签名。可选的,所述对象获取模块包括:对象获取子模块,被配置为根据预先保存的所述待调用函数的名字和所述待调用函数的签名,获取所述待调用函数在所述子类中的对象。根据本公开实施例的第二方面,提供一种函数调用装置,包括:存储器;被配置为存储处理器可执行指令的存储器;其中,所述处理器被配置为:获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;获取所述待调用函数在所述子类中的对象;将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。本公开的实施例提供的技术方案可以包括以下有益效果:通过获取待调用函数在父类或祖先类中的标识,待调用函数在继承父类或祖先类的子类中被覆盖,待调用函数在父类或祖先类中的标识与在子类中的标识不同,以及获取待调用函数在子类中的对象,将父类或祖先类、待调用函数在父类或祖先类中的标识、待调用函数在子类中的对象以及子类中的对象的参数作为非虚函数的调用函数的输入,以通过子类在父类或祖先类中调用待调用函数。本实施例的方法使用JNI接口实现了多层级调用需求,并且JNI接口易于实现,提高了开发效率。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。【附图说明】此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本专利技术的实施例,并与说明书一起用于解释本专利技术的原理。图1是根据一示例性实施例示出的一种函数调用方法的流程图;图2是根据一示例性实施例示出的一种函数调用方法的流程图;图3是根据一示例性实施例示出的一种函数调用装置的框图;图4是根据一示例性实施例示出的一种函数调用装置的框图;图5是根据一示例性实施例示出的一种函数调用装置的框图;图6是根据一示例性实施例示出的一种函数调用装置的框图;图7是根据一示例性实施例示出的一种函数调用装置的实体框图;图8是根据一示例性实施例示出的一种函数调用装置的框图。【具体实施方式】这里将详细地对示例性实施例进行说明本文档来自技高网...

【技术保护点】
一种函数调用方法,其特征在于,包括:获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;获取所述待调用函数在所述子类中的对象;将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。

【技术特征摘要】

【专利技术属性】
技术研发人员:董俊杰
申请(专利权)人:小米科技有限责任公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1