ホームページ  >  に質問  >  本文

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();
  }
黄舟黄舟2712日前432

全員に返信(7)返信します

  • 黄舟

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

    基礎となるフレームワーク メソッドは、アプリケーション層の使用法をすべて把握できるわけではありません。プログラムの正確性を保証するために、一部のユーザーがルールに従わない可能性があります。

    返事
    0
  • PHP中文网

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

    id はキャッシュの一意性を決定し、hashCode、equals メソッドで一意性参照を決定します

    返事
    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 には 3 つのタイプがあります:
    1.事後条件 事後条件は、メソッドの呼び出しによって必ず得られる結果を表します。アサーションと同様に、言語がアサーションをサポートしていない場合は、テスト駆動のアサーションを自分で作成する必要があります。

    2.事前条件 precondition。事後条件が事前条件を満たす必要があることを事前に保証します。
    契約の前提条件と事後条件の組み合わせによって、前提条件が満たされ、事後条件が実現されなければならないため、隠れた機能上の義務はなくなり、物事が明確に定められます。この方法でのみ、通常のオブジェクト呼び出しを保証する設計をコードに実装できます。

    3. クラス不変式 クラス不変式は、オブジェクトの状態の表明を表します。この不変式は、集合体の整合性を厳密に定義します。

    返事
    0
  • キャンセル返事