java - 为什么有些类的方法开始先判断getId() == null?

 momosu1028_738_636 发布于 2022-10-28 10:45
  1. mybatis3中PerpetualCache中的equals和hashCode方法在第一行先判断getId() == null, 有点不能理解, 为什么要这个判断, 不是不可能为null吗。

  2. 代码如下:

  @Override
  public boolean equals(Object o) {
    if (getId() == null) {
      throw new CacheException("Cache instances require an ID.");
    }
    if (this == o) {
      return true;
    }
    if (!(o instanceof Cache)) {
      return false;
    }

    Cache otherCache = (Cache) o;
    return getId().equals(otherCache.getId());
  }

  @Override
  public int hashCode() {
    if (getId() == null) {
      throw new CacheException("Cache instances require an ID.");
    }
    return getId().hashCode();
  }
7 个回答
  • 这个是DBC的策略实现
    DBC分三种:
    1.Post-conditions 后置条件postcondition 表示调用一个方法一定会得到的结果。类似断言Assertion,如果语言不支持断言,那么我们就必须自己写断言,也就是测试驱动了。

    2.Pre-conditions 前置条件precondition ,预先保证后置条件必须满足前置条件。
    前置条件必须满足,后置条件必须实现,通过契约的前置和后置条件的结合,就不会出现有隐藏的功能obligations,这样,事情清清楚楚地被摆出来。这样设计才能落实为代码,保证正常的对象调用。

    3.类不变量class invariant 表示对象状态的断言,执行完任何操作后都都应该被满足,不变量还是对聚合体进行完整性严格定义。

    2022-10-29 13:47 回答
  • 假如getId()==null呢,你把原因和结果搞反了,是因为不允许为空,所以有了if判断,如果为空,抛出一个自定义异常,告诉你不能为null

    2022-10-29 13:47 回答
  • 不错,学习了

    2022-10-29 13:48 回答
  • 当协作工作时,你是无法判断调用方的,我们口头的约定是很容易被某个人轻易打破的,为了避免有人去做这样的事,参数检查是很有意义也很有必要的行为,这样也便于问题的排查

    2022-10-29 13:49 回答
  • 这是个很好的编程习惯

    2022-10-29 13:50 回答
  • id决定缓存的唯一性,hashCode,equals方法的判断唯一性参考

    2022-10-29 13:52 回答
  • 底层框架的方法无法知道应用层的所有使用情况,极可能有些人没有遵守规则,为了保证程序的正确性,做一些防卫性的代码,是有必要的。

    2022-10-29 13:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有