当前位置: 首页 > news >正文

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

图片

http://www.lryc.cn/news/323555.html

相关文章:

  • Matlab之已知2点绘制长度可定义的射线
  • 虚拟机安装Linux系统,FinalShell远程连接Linux
  • MacOS Xcode 使用LLDB调试Qt的 QString
  • C/C++代码性能优化——编程实践
  • JVM—内存可见性
  • VScode手动安装vsix格式插件,提示安装插件与code版本不兼容问题
  • K8S Storage
  • Day54-nginx限速-访问日志-错误日志精讲
  • SQL经典面试题
  • Java基础知识总结(14)
  • MacOS - GCC 版本升级解决方案
  • 小程序绕过 sign 签名
  • 【Canvas与艺术】绘制动态太极图
  • Llama 2 模型
  • SQLiteC/C++接口详细介绍sqlite3_stmt类(十一)
  • 【理解机器学习算法】之Clustering算法(Agglomerative Clustering)
  • 千帆AppBuilder开发参考-应用API调用说明
  • python自定义日历库,与对应calendar库函数功能基本一致
  • css3鼠标悬停图片特效,图片悬停效果源码
  • 使用CSS3画出一个叮当猫HTML源码
  • Spring Boot 自动化单元测试类的编写过程
  • 复试专业前沿问题问答合集8-3——RNN、Hadoop、GPT大语言模型
  • 序列的使用
  • golang kafka sarama 源码解析
  • Flutter知识点整理
  • 现代游戏引擎架构
  • 深度学习:复杂工业场景下的复杂缺陷检测方法
  • CSDN个人简介优化 html font属性
  • 从哈希桶角度看 unordered_map 与 unordered_set 的实现
  • 飞天使-k8s知识点27-kubernetes温故知新2-deployment