Je passe sur toute l'exception intégrée dans JDK, je ne trouve que 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. P> sizelimitexceedException code> 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? P>
Mise à jour: H2>
4 Réponses :
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 P>
indexOutofboundSException code> 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.
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 Sachez qu'il est considéré comme considéré 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> Nouvelle IllegalArgumentException (" SSN n'est que de la longueur
if (!SSNFormat.matches(ssn)) { // <-- whoops condition is inverted
person.setSSN(ssn);
}
Vous pouvez créer une exception comme Cette exception sera mise en oeuvre de cette manière dans votre pojo: p> et final que vous utilisez. Votre objet attrape d'objet comme celui-ci: p> sortie:
Vous avez entré une longueur de: 8 Considérant que la longueur minimale attendue est la suivante: 9 code> p> p>
Supposons qu'il y ait eu un document JDK intégré Ce serait gênant: p> 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 Alors votre Une exception personnalisée peut produire un message d'erreur correspondant à la raison de l'échec: p> 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>
Si la SSN entrée avait la longueur correcte, le message spécifierait les caractères valides (chiffres uniquement). P> li>
ol> Exemple: P> 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?
SizelimitsubeedException code> serait une exception vérifiée, identique au
sizelimitexceedException code> ). LI>
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>
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;
}
...
}
Je ne suis pas tout à fait sûr du raisonnement derrière vous lancer des exceptions si quelque chose est en dessous de i> 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 code> 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 code>? À propos, vous pouvez signaler un bogue et affirmer qu'un
SizelimitbelowException code> est requis mais n'existe pas.
Pouvez-vous nous donner le contexte à ce que vous faites et comment?
Le
SizelimitexceedException code> et aussi
LimiteXceedException code> provenez du paquet
javax.naming code> 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 code>) 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é.