Maison  >  Questions et réponses  >  le corps du texte

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();
  }
黄舟黄舟2763 Il y a quelques jours471

répondre à tous(7)je répondrai

  • 黄舟

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

    La méthode du framework sous-jacent ne peut pas connaître toute l'utilisation de la couche application. Il est très probable que certaines personnes ne suivent pas les règles. Afin de garantir l'exactitude du programme, il est nécessaire de créer du code défensif.

    répondre
    0
  • PHP中文网

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

    id détermine l'unicité du cache, hashCode, méthode égale pour déterminer la référence d'unicité

    répondre
    0
  • 巴扎黑

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

    C'est une bonne habitude de programmation

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    Lorsque vous travaillez en collaboration, vous ne pouvez pas juger l'appelant. Notre accord verbal peut facilement être rompu par quelqu'un. Afin d'éviter que quelqu'un ne fasse une telle chose, la vérification des paramètres est un comportement très significatif et nécessaire, ce qui facilite également le dépannage.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    Pas mal, j'ai beaucoup appris

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    Et si getId()==null, vous avez inversé la cause et le résultat, car il n'est pas autorisé à être nul, il y a donc un jugement if. S'il est nul, une exception personnalisée est levée pour vous le dire. ça ne peut pas être nul

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:40:01

    C'est la mise en œuvre de la stratégie de DBC
    Il existe trois types de DBC :
    1.Post-conditions La postcondition représente le résultat qui sera définitivement obtenu en appelant une méthode. Comme pour les assertions, si le langage ne prend pas en charge les assertions, nous devons alors écrire nous-mêmes des assertions, qui sont pilotées par des tests.

    2.Pre-conditions préalables, qui garantissent à l'avance que la post-condition doit répondre à la pré-condition.
    Les conditions préalables doivent être remplies et les postconditions doivent être réalisées. Grâce à la combinaison des conditions préalables et postconditions du contrat, il n'y aura pas d'obligations fonctionnelles cachées, de sorte que les choses soient clairement définies. Ce n'est qu'ainsi que la conception pourra être implémentée dans le code pour garantir des appels d'objet normaux.

    3. Invariant de classe L'invariant de classe représente l'affirmation de l'état de l'objet, qui doit être satisfait après avoir effectué toute opération. L'invariant définit toujours strictement l'intégrité de l'agrégat.

    répondre
    0
  • Annulerrépondre