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

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

いいねを押す +0
洪涛

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

いいねを押す +0
巴扎黑

これはプログラミングの良い習慣です

いいねを押す +0
左手右手慢动作

共同で作業する場合、口頭での合意は誰かによって簡単に破られる可能性があり、パラメータのチェックは非常に意味があり、トラブルシューティングも容易になります。

いいねを押す +0
左手右手慢动作

悪くない、たくさんのことを学びました

いいねを押す +0
左手右手慢动作

getId()==null の場合は、原因と結果が逆になります。null であることは許可されていないため、if 判定が行われます。null の場合は、そのことを示すカスタム例外がスローされます。

を null にすることはできません。
いいねを押す +0
左手右手慢动作

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

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート