为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2019-03-27 21:14:05
mybatis3中PerpetualCache中的equals和hashCode方法在第一行先判断getId() == null, 有点不能理解, 为什么要这个判断, 不是不可能为null吗。代码如下:  @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();  }
查看完整描述

5 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-04-22
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-04-22
?
温温酱

TA贡献1752条经验 获得超4个赞

这个是DBC的策略实现
DBC分三种:
1.Post-conditions 后置条件postcondition 表示调用一个方法一定会得到的结果。类似断言Assertion,如果语言不支持断言,那么我们就必须自己写断言,也就是测试驱动了。

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

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


查看完整回答
反对 回复 2019-04-22
  • 5 回答
  • 0 关注
  • 878 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信