[发明专利]函数调用方法和装置在审
申请号: | 201510607366.X | 申请日: | 2015-09-22 |
公开(公告)号: | CN105183571A | 公开(公告)日: | 2015-12-23 |
发明(设计)人: | 董俊杰 | 申请(专利权)人: | 小米科技有限责任公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 北京三高永信知识产权代理有限责任公司 11138 | 代理人: | 滕一斌 |
地址: | 100085 北京市海淀区清*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 函数 调用 方法 装置 | ||
技术领域
本公开涉及计算机领域,尤其涉及一种函数调用方法和装置。
背景技术
安卓系统主要使用java语言作为开发语言,java是一门面向对象的开发语言,在Java语言内部,程序以类为单位组织。java中继承是面向对象最显著的一个特征,子类会自动继承父类的函数和变量,在子类中可以调用父类的函数和变量。在继承中将子类和父类中相同函数称为覆盖,这里相同函数是指同名、同参数列表以及同返回类型的函数。在覆盖中只能调用子类中该相同函数,不能使用正常的方法调用父类中该相同函数。
发明内容
为克服相关技术中存在的问题,本公开提供一种函数调用方法和装置。
根据本公开实施例的第一方面,提供一种函数调用方法,包括:
获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;
获取所述待调用函数在所述子类中的对象;
将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。
可选的,所述非虚函数的调用函数为java语言中的CallNonvirtual<Type>Method函数。
可选的,所述获取待调用函数在父类或祖先类中的标识,包括:
根据所述父类或祖先类查询哈希表,所述哈希表用于保存类与所述类的各函数的标识的对应关系;
若在所述哈希表中查询到所述父类或祖先类的各函数的标识,则根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中确定所述待调用函数在所述父类或祖先类中的标识;
若在所述哈希表中没有查询到所述父类或祖先类的各函数的标识,或者,根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中没有获取到所述待调用函数在所述父类或祖先类中的标识,则使用函数标识的获取函数获取所述待调用函数在所述父类或祖先类中的标识,所述函数标识的获取函数的参数为:所述父类或祖先类、所述待调用函数的名字和所述待调用函数的签名;
将所述父类或祖先类以及所述待调用函数在所述父类中的标识的对应关系保存到所述哈希表中。
可选的,所述函数标识的获取函数为java中的GetMethodID函数。
可选的,所述获取待调用函数在父类或祖先类中的标识之前,所述方法还包括:
创建所述待调用函数在所述父类或祖先类中的对象,所述父类或祖先类中的对象包括所述待调用函数的名字和所述待调用函数的签名;
保存所述待调用函数的名字和所述待调用函数的签名。
可选的,所述获取所述待调用函数在所述子类中的对象,包括:
根据预先保存的所述待调用函数的名字和所述待调用函数的签名,获取所述待调用函数在所述子类中的对象。
根据本公开实施例的第二方面,提供一种函数调用装置,包括:
标识获取模块,被配置为获取待调用函数在父类或祖先类中的标识,所述待调用函数在继承所述父类或祖先类的子类中被覆盖,所述待调用函数在所述父类或祖先类中的标识与在所述子类中的标识不同;
对象获取模块,被配置为获取所述待调用函数在所述子类中的对象;
调用模块,被配置为将所述父类或祖先类、所述待调用函数在所述父类或祖先类中的标识、所述待调用函数在所述子类中的对象以及所述子类中的对象的参数作为非虚函数的调用函数的输入,以通过所述子类在所述父类或祖先类中调用所述待调用函数。
可选的,所述非虚函数的调用函数为java语言中的CallNonvirtual<Type>Method函数。
可选的,所述标识获取模块包括:
查询子模块,被配置为根据所述父类或祖先类查询哈希表,所述哈希表用于保存类与所述类的各函数的标识的对应关系;
确定子模块,被配置为在所述哈希表中查询到所述父类或祖先类的各函数的标识时,根据所述待调用函数的名字和所述待调用函数的签名,从所述父类或祖先类的各函数的标识中确定所述待调用函数在所述父类或祖先类中的标识;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于小米科技有限责任公司,未经小米科技有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510607366.X/2.html,转载请声明来源钻瓜专利网。