Ce type d'Exception dois-je lancer si le mauvais type de l'objet est-il passé?
Ce type d'Exception dois-je lancer si le mauvais type de l'objet est passé dans ma méthode compareTo?
ClassCastException?
Pouvez-vous nous montrer votre
Eh bien, cela dépend de la façon dont vous gérer cette exception. Je serais probablement jeter un
Si vous passer dans la mise en œuvre de compareTo, vous obtiendrez que le CCE pour gratuit. Pourquoi la peine de jeter explicitement.
compareTo
code?Eh bien, cela dépend de la façon dont vous gérer cette exception. Je serais probablement jeter un
IllegalArgumentException
avec un message approprié. Btw, aurait-il un moyen de ne pas laisser passer le mauvais type d'objet? Pourriez-vous élaborer sur les cas d'utilisation? On pourrait peut-être vous aider à empêcher que le moment de l'exécution et de l'utilisation de la puissance du compilateur. Notez que Comparable
peut être paremeterized avec un type générique parametera ainsi compareTo
pouvez utiliser des paramètres spécifiques.Si vous passer dans la mise en œuvre de compareTo, vous obtiendrez que le CCE pour gratuit. Pourquoi la peine de jeter explicitement.
OriginalL'auteur ritch | 2012-05-03
Vous devez vous connecter pour publier un commentaire.
Il serait
IllegalArgumentException
dans un sens général, lorsque le passé de valeur n'est pas la bonne.Cependant, comme @Tom réponse ci-dessous l'indique, il pourrait aussi être un
ClassCastException
pour mauvaise types. Cependant, je ne suis pas encore à la rencontre de l'utilisateur code qui fait cela.Mais plus fondamentalement, si vous êtes à l'aide de la
compareTo
avec les génériques, ce sera une erreur de compilation.Considérez ceci:
Où voyez-vous la possibilité d'un mauvais type transmis dans l'exemple ci-dessus?
Pourquoi le downvote?
si adarshr était Chuck Norris, puis la Javadoc aurait été de mal 🙂
Je voudrais examiner la question du mal. La réponse a certainement conduit les OP dans le bon sens 🙂
Si vous ne
Comparble p = new Person(); p.compareTo(1); // throws a ClassCastException
l'Utilisation de génériques est probable que vous n'avez pas besoin de jeter ClassCastException explicitement, même mieux que le compilateur a une chance pour signaler une erreur au moment de la compilation.OriginalL'auteur
Sans surprise, la Les docs de l'API spécifier l'exception levée dans ce cas.
En supposant que vous utilisez les médicaments génériques, vous obtiendrez automatiquement cette exception si quelqu'un tente d'appeler vos méthodes à l'aide de matières types, de réflexions ou de certains autres dangereux technique.
ClassCastException
sera levée par la JVM, où l'OP est de poser des questions au sujet d'une exception besoin de les jeter. Donc je suis en faveur de laIllegalArgumentException
réponse. Peut-être que c'est un langage chose, cependant.L'API docs sont très claires. Vous êtes en désaccord avec la spécification de la méthode, qui est une position inhabituelle à prendre.
Tom, je viens de réaliser que je dois être aveugle. D'une certaine manière, j'ai réussi à filtrer les
compareTo
ils mettent en œuvre. Je voudrais changer ma déclaration ci-dessus 🙂+1 c'est la meilleure réponse pour les non-générique implémentations, et il donne le paresseux d'entre nous un lien direct à l'API docs pour démarrer!
OriginalL'auteur