java - 为什么有些类的方法开始先判断getId() == null?
黄舟
黄舟 2017-04-18 09:38:01
0
7
401
  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)
黄舟

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

    洪涛

    id决定缓存的唯一性,hashCode,equals方法的判断唯一性参考

      巴扎黑

      这是个很好的编程习惯

        左手右手慢动作

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

          左手右手慢动作

          不错,学习了

            左手右手慢动作

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

              左手右手慢动作

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

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

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

                최신 다운로드
                더>
                웹 효과
                웹사이트 소스 코드
                웹사이트 자료
                프론트엔드 템플릿
                회사 소개 부인 성명 Sitemap
                PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!