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

  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();

  }


肥皂起泡泡
浏览 879回答 5
5回答

凤凰求蛊

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

蛊毒传说

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

温温酱

这个是DBC的策略实现DBC分三种:1.Post-conditions 后置条件postcondition 表示调用一个方法一定会得到的结果。类似断言Assertion,如果语言不支持断言,那么我们就必须自己写断言,也就是测试驱动了。2.Pre-conditions 前置条件precondition ,预先保证后置条件必须满足前置条件。前置条件必须满足,后置条件必须实现,通过契约的前置和后置条件的结合,就不会出现有隐藏的功能obligations,这样,事情清清楚楚地被摆出来。这样设计才能落实为代码,保证正常的对象调用。3.类不变量class invariant 表示对象状态的断言,执行完任何操作后都都应该被满足,不变量还是对聚合体进行完整性严格定义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java