-9
votes

Une longueur d'exception intégrée plus courte que prévu?

Je passe sur toute l'exception intégrée dans JDK, je ne trouve que sizelimitexceedException lorsque la taille dépasse la longueur attendue. Toutefois, si je veux lancer une exception lorsque la limite de taille est inférieure à la longueur attendue, il n'y a pas de classe d'exception telle que je peux appeler?

Mise à jour:

SSN est une longueur de 9 chiffres. Si l'entrée SSN est plus courte de 9 chiffres de longueur, je tiens à jeter cette exception.


10 commentaires

Je ne suis pas tout à fait sûr du raisonnement derrière vous lancer des exceptions si quelque chose est en dessous de une certaine limite, mais vous pouvez toujours créer votre propre classe.


Aucune raison de ne pas créer votre propre classe d'exception.


@Marvin, je n'ai vu aucune raison pour laquelle JDK a une boîte de la boîte de «SizeliMitexceedException», mais pas comme «SizelimitbelowException». JDK devrait l'avoir, au lieu de nous le créer par nous-mêmes.


Quel serait le point d'avoir une telle exception? Le JDK devrait fournir des classes intégrées à des cas d'utilisation courantes et sensibles et pour un SizelimitbelowException Je ne vois pas non plus. Voulez-vous élaborer et clarifier votre cas?


@Marvin Ma question est simple, pourquoi JDK a-t-elle "sizelimitexceedException" maintenant, mais pas quelque chose comme "SizelimitbelowException"?


Avez-vous considéré javax.name.limitexceedException ? À propos, vous pouvez signaler un bogue et affirmer qu'un SizelimitbelowException est requis mais n'existe pas.


Pouvez-vous nous donner le contexte à ce que vous faites et comment?


Le SizelimitexceedException et aussi LimiteXceedException provenez du paquet javax.naming assez spécial. Vous ne devriez utiliser aucun d'entre eux simplement parce que le nom sonne bien. Optez pour indexOutofboundException (qui provient de java.lang ) comme @waifu_anton souligne ou utilisez votre propre exception.


@Kumarrohit SSN est une longueur de 9 chiffres. Si l'entrée SSN est plus courte de 9 chiffres de longueur, je veux jeter cette exception


Je viens de lancer une exception illegalargumentException avec un message approprié. Il sera évident pour quiconque en regardant les journaux ce qui s'est passé.


4 Réponses :


1
votes

Peut-être que vous voulez quelque chose comme indexOutOfboundsException. Il est jeté d'indiquer qu'un index d'une sorte de données est hors limites. https://docs.oracle.com/javase/ 7 / Docs / API / Java / Lang / indexOutOfboundSexception.html


1 commentaires

indexOutofboundSException n'est pas le meilleur ajustement; Il est lancé par la ficelle elle-même lorsque vous accédez à la 9. caractère de la chaîne SSN, mais c'est trop court.



7
votes

Lorsque vous utilisez une exception d'adaptation, c'est une bonne pratique et vous devriez passer du temps à rechercher un ajustement (comme vous l'avez fait), il n'est généralement pas nécessaire de passer en panneau avec elle.

Dans votre exemple, je «D Considérez-le totalement bien si vous venez de lancer un Nouvelle IllegalArgumentException (" SSN n'est que de la longueur mais la longueur 9 est requise ") code>. Cela échouera à l'exécution et vous donnera une structure de pile significative. P>

Sachez qu'il est considéré comme considéré mauvaise pratique pour utiliser l'exception pour le flux de contrôle. Alors s'il vous plaît n'utilisez jamais quelque chose comme p> xxx pré>

Utilisez plutôt un validateur personnalisé pour vérifier SSN avant de la définir et utilisez uniquement l'exception pour protéger les erreurs de programmation. P>

if (!SSNFormat.matches(ssn)) { // <-- whoops condition is inverted
    person.setSSN(ssn);
}


0 commentaires

1
votes

Vous pouvez créer une exception comme xxx

Cette exception sera mise en oeuvre de cette manière dans votre pojo: xxx

et final que vous utilisez. Votre objet attrape d'objet comme celui-ci: xxx

sortie: Vous avez entré une longueur de: 8 Considérant que la longueur minimale attendue est la suivante: 9


0 commentaires

2
votes

Supposons qu'il y ait eu un document JDK intégré SizelimitsubeedException code> (je viens d'apprendre que la sous-légère est l'opposé de dépassement). Serait votre code, qui vérifie la longueur du jet SSN une exception - SizelimitexceedException code> - Si la taille dépasse la taille attendue, et une autre exception - SizelimitsubeedException code> - si la taille de la taille de la taille taille attendue?

Ce serait gênant: p>

  1. Vous devriez spécifier à la fois des exceptions dans la clause code> de votre méthode (en supposant SizelimitsubeedException code> serait une exception vérifiée, identique au sizelimitexceedException code> ). LI>
  2. L'appelant de votre méthode devrait gérer les deux exceptions. Li> ol>

    Et si la taille est correcte, mais quelque chose d'autre est faux - par exemple, le SNN contient des caractères non chiffres? Souhaitez-vous lancer une troisième exception pour cela? P>

    Mon point est que vous feriez mieux de jeter un seul type d'exception à partir de la méthode qui définit le SSN. P>

    si vous voulez C'est une exception vérifiée (que je suggère, afin de forcer l'appelant à le gérer), je suggère de définir votre propre exception personnalisée - peut-être invalidssnexception code>. Cette exception peut avoir un constructeur avec plusieurs arguments - l'un d'entre eux le SSN invalide, un autre pourrait être un booléen code> indiquant si l'exception a été lancée en raison d'une longueur incorrecte. P>

    Alors votre Une exception personnalisée peut produire un message d'erreur correspondant à la raison de l'échec: p>

    1. Si le SSN entré avait la mauvaise longueur (et cela n'a pas d'importance si elle est trop longue ou trop courte), le message spécifierait la longueur attendue (9). P> Li>

    2. Si la SSN entrée avait la longueur correcte, le message spécifierait les caractères valides (chiffres uniquement). P> li> ol>

      Exemple: P>

      class Person {
      
          ...
      
          public setSSN (String ssn) throws InvalidSSNException
          {
              if (ssn == null) {
                  throw new InvalidSSNException (ssn, false);
              }
              if (ssn.length() != 9) {
                  // exception thrown as a result of invalid length
                  throw new InvalidSSNException (ssn, true);
              }
              for (char c : ssn.toCharArray()) {
                  if (c < '0' || c > '9') {
                      // exception thrown as a result of invalid character
                      throw new InvalidSSNException (ssn, false);
                  }
              }
              this.ssn = ssn;
          }
          ...
      
      }
      


0 commentaires