从0到1实现RPC | 03 重载方法和参数类型转换

本文讨论了Java中重载方法的不支持问题以及类型转换的挑战,提出在Provider端使用完整方法签名、处理请求参数的processArgs方法,并强调了TypeUtils.cast工具在类型转换中的作用。还列举了各种类型的测试案例以验证解决方案的有效性。
摘要由CSDN通过智能技术生成

一、存在的问题

1.重载方法在当前的实现中还不支持,调用了会报错。

图片

图片

2.类型转换也还存在问题。

假设定义的接口如下,参数是float类型。

图片
图片

在Provider端接受到的是一个Double类型,这是因为web应用接收的请求后处理的类型。

图片

在反射调用的时候就会报错。

图片

二、解决方法重载问题

在Provider端创建的时候使用完整的方法签名替换方法全限定名。

图片

方法签名:方法名称+参数个数+参数类型

图片

在Consumer端封装请求参数时,传入方法签名即可。

图片

举个例子:

图片

三、解决参数类型转换

在Provider端进行反射之前,处理请求参数。

图片

processArgs()方法负责处理请求每个请求参数,传入的参数和方法参数类型匹配处理。

图片

同理,在Consumer端需要对返回的结果类型进行参数处理。

图片

参数处理工具类是TypeUtils.cast():

1.兼容的父子类型不需要处理;

2.处理数组类型:是一个什么样的数组,对每个值进行处理;

3.处理Map:使用json序列化;

4.基本类型使用封装类型;

图片

四、各种类型的测试:

1.引用类型参数;

2.int类型参数;

3.重载方法;

4.无参方法;

5.int类型参数,String类型返回值;

6.本地方法;

7.int类型参数,int类型返回值;

8.无参方法,String类型返回值;

9.数组类型返回值;

10.数组参数,数组返回值

图片

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值