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

一、存在的问题

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.数组参数,数组返回值

图片

相关推荐

  1. 01实现YOLOv3

    2024-03-23 17:30:02       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 17:30:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 17:30:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 17:30:02       87 阅读
  4. Python语言-面向对象

    2024-03-23 17:30:02       96 阅读

热门阅读

  1. jquery如何请求用ajax请求假数据

    2024-03-23 17:30:02       35 阅读
  2. SQL server 里对多行数据进行循环处理

    2024-03-23 17:30:02       42 阅读
  3. MySQL内存表和临时表的区别

    2024-03-23 17:30:02       37 阅读
  4. 最大中位数(c++题解)

    2024-03-23 17:30:02       41 阅读
  5. MySQL常用的聚合函数(比较常用滴~)

    2024-03-23 17:30:02       37 阅读
  6. 哈夫曼de树

    2024-03-23 17:30:02       48 阅读
  7. 探索与利用:ε-greedy策略的魅力

    2024-03-23 17:30:02       33 阅读
  8. 5.80 BCC工具之tcpconnect.py解读

    2024-03-23 17:30:02       43 阅读
  9. 面试(二)

    2024-03-23 17:30:02       35 阅读