Rocket - tilelink - Bits vs. UInt
2024-08-25 05:12:17
https://mp.weixin.qq.com/s/lzDmIHkUph3b1Fxgx66ySg
分析移位/取反操作在Intellij中提示错误的问题。
1. 问题
用到移位/取反的地方都会有错误提示:
提示信息为:
2. 分析
问题发生在对UInt变量,调用在Bits中定义的方法,然后把返回值依然作为UInt使用。但是Bits中定义的方法,返回的是Bits,这就产生了类型不匹配的问题。
以“>>”方法为例。
在Bits中的定义为:
其实现依赖于抽象方法do_>>。
do_>>在UInt类中实现:
对比发现在Bits中,do_>>返回Bits类型,而在UInt中,do_>>返回UInt类型。子类中的方法会覆盖父类中的方法。所以针对UInt对象调用do_>>方法时,返回的是UInt:
问题在于实际使用的不是do_>>,而是>>方法。>>只在Bits中定义,返回的是Bits。虽然其实现使用的是do_>>会返回UInt,但是这个返回的UInt会被转换为Bits对象,再作为>>的返回值返回。
3. 解决
有两个解决方法。
1) 在子类中也定义>>/<</~等这些方法,并返回子类类型
这样修改每一个子类中都要定义这一组方法,解决不了代码复用的问题。
2) 在Bits中,把返回值类型定义为this.type。有两个地方可以佐证这种写法:
a. pad方法
b. 检视意见
REVIEW TODO: should these return this.type or Bits?
最新文章
- 使用Adminlite + ASP.NET MVC5(C#) + Entityframework + AutoFac + AutoMapper写了个api接口文档管理系统
- 获取documents、tmp、app、Library的路径的方法
- 跨平台C的IDE
- 李洪强漫谈iOS开发[C语言-048]-打印平方表
- Liferay7 BPM门户开发之26: 集成Activiti到Liferay7
- 《ASP.NET1200例》ListView 控件与DataPager控件的结合<;二>;
- jQuery Mobile 基础
- ubuntu下安装花生壳
- CentOS 5.x版本升级PHP
- (三)CSS高级语法
- oracle 大表删除数据后,回收空间的问题。
- WebForm Repeater的事件、后天数据展示--2017年1月8日
- C++中的cout输出机制
- input时间输入框小解
- C++模板入门教程(一)——模板概念与基本语法
- [crypto] AEAD是啥
- java中实现全局变量的功能
- MongoDB 进程控制系列一:查看当前正在执行的进程
- VS2015安装ASP.NET MVC4
- nginx 知识点