찾다

 >  Q&A  >  본문

java - 为什么有些类的方法开始先判断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();
  }
黄舟黄舟2766일 전478

모든 응답(7)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 09:40:01

    기본 프레임워크 방법으로는 애플리케이션 계층의 사용법을 모두 알 수 없습니다. 프로그램의 정확성을 보장하려면 일부 사람들이 규칙을 따르지 않을 가능성이 높습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:40:01

    id는 캐시의 고유성을 결정하고 hashCode는 고유성 참조를 결정하는 메서드인 hashCode

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:40:01

    좋은 프로그래밍 습관입니다

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    협업할 때는 발신자를 판단할 수 없습니다. 누군가가 그런 일을 하는 것을 방지하기 위해 매개변수 확인은 매우 의미 있고 필요한 행동이며, 이는 또한 문제 해결을 촉진합니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    나쁘지 않아요, 많이 배웠어요

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    getId()==null인 경우 null이 허용되지 않으므로 원인과 결과가 반대이므로 if 판단이 필요합니다. null인 경우 이를 알리는 사용자 지정 예외가 발생합니다. null일 수 없습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    이것은 DBC의 전략 구현입니다
    DBC에는 세 가지 유형이 있습니다.
    1. 사후 조건 사후 조건은 메소드를 호출하여 반드시 얻을 수 있는 결과를 나타냅니다. 어설션과 유사하게 언어가 어설션을 지원하지 않으면 테스트 기반의 어설션을 직접 작성해야 합니다.

    2.사전 조건 사전 조건은 사후 조건이 사전 조건을 충족해야 함을 미리 보장합니다.
    전제조건이 충족되어야 하고, 사후조건이 실현되어야 계약의 전제조건과 사후조건의 조합을 통해 숨겨진 기능적 의무가 없어 모든 것이 명확하게 정리됩니다. 이러한 방식으로만 디자인을 코드로 구현하여 정상적인 개체 호출을 보장할 수 있습니다.

    3. 클래스 불변은 모든 작업을 수행한 후에 충족되어야 하는 객체 상태의 주장을 나타냅니다. 불변은 여전히 ​​집계의 무결성을 엄격하게 정의합니다.

    회신하다
    0
  • 취소회신하다