zoukankan      html  css  js  c++  java
  • Rocket

    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?
     
  • 相关阅读:
    bootstrap的引用和注意事项
    css样式表的知识点总结
    数据去重宏脚本
    redis总结
    list对象中根据两个参数过滤数据
    dt常用类
    C#删除字符串最后一个字符的几种方法
    C#的split分割的举例
    数据库优化的几个注意点
    两种转换城市的方式
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11205334.html
Copyright © 2011-2022 走看看