Java NoSuchElementException
J'ai donc une assez grande application java que j'ai écrit il y a un an et j'essaie de comprendre à nouveau. Je suis à la recherche d'une méthode dans le code où il y a un risque évident de se NoSuchElementException: je vais appeler .next() sur un scanner variable qui a été construit avec une chaîne de caractères arbitraire. La seule chose que la méthode est déclarée à jeter sont des sous-classes d'Exception. Le risqué de commande n'est pas écrit dans un fourre-block. Le code compile et fonctionne très bien et quand j'utilise mon gui de telle façon qu'il faut jeter un NoSuchElementException rien ne se passe :O
Comme un test, j'ai écrit un fourre-bloc dans le code compilé, a couru le gui et fait jeter NoSuchElementException de nouveau et l'application avec succès attiré l'exception et ont agi en conséquence. Comment est-ce que je peux compiler le code, sans préciser la cette exception peut être levée? Si c'est une utilisation à tous, voici le code sans le catch-bloc:
public static Expression interpret(final Scanner scanner)
throws
InvalidPosition,
NoSuchSpreadsheet,
IllegalStartOfExpression,
InvalidExpression,
FalseSyntax,
InvalidRange {
String keyword = null;
try {
keyword = scanner.next();
} catch (NoSuchElementException e) {
throw new IllegalStartOfExpression();
}
switch(keyword) {
case "Get":
Position pos = PositionInterpreter.interpret(scanner.next());
Expression expression = Application.instance.get(pos);
if (expression instanceof Text) {
System.out.println("Failure");
} else { System.out.println("Success"); }
return new Text(expression.toString());
case "Int":
return new Int(
scanner.nextInt());
Comme vous pouvez le voir, la méthode suppose simplement qu'il y a plus d'un mot dans le scanner après vérification si il y a au moins une. Comment suis-je arriver de loin avec la compilation de ce?
- Je ne vois pas où je déclare que la méthode de la lance Hunter, veuillez préciser
Vous devez vous connecter pour publier un commentaire.
C'est être cause
NoSuchElementException
n'est pas cochée exception, ce qui signifie qu'il "est-un"RuntimeException
qui ne vous forcent pas à les attraper.La décoché les classes d'exceptions sont la classe RuntimeException et de ses sous-classes, et la classe d'Erreur et de ses sous-classes. Toutes les autres classes d'exception sont vérifiées classes d'exception. L'API Java définit un certain nombre de classes d'exception, à la fois activée et désactivée. Supplémentaires classes d'exception, à la fois activée et désactivée, peuvent être déclarés par les programmeurs. Voir ref pour une description de la classe exception de la hiérarchie et de certaines classes d'exception définie par l'API Java et Java virtual machine.
Runtime exceptions
servir le même but que checked exceptions; de communiquer des conditions exceptionnelles (échecs inattendus, etc) à l'utilisateur.vérifié exception des forces de l'appelant d'une méthode pour gérer cette exception, même s'ils ne savent pas comment le gérer. Souvent, les développeurs finit par attraper l'objet d'une exception, seulement de re-jeter (ou une autre exception). D'où la
Runtime exceptions
Est ici l'exception de la hiérarchie
Que la question a déjà été répondu, je tiens à souligner que cette démarche est très mauvaise conception et de ne pas l'usage prévu de la
Scanner
classe:Ce que vous devez vraiment faire est de demander le scanner s'il existe une entrée, et ensuite seulement de la récupération, comme:
La même chose s'applique à la ligne qui est la cause de votre problème:
NoSuchElementException
.RuntimeException
s indiquer des problèmes graves que vous ne devriez pas essayer de traiter, dans ce cas, c'est parce que votre code à l'aide de la classe incorrecte: Il est prévu que vous vérifiez d'abord.java.util.NoSuchElementException
est une sous-classe dejava.lang.RuntimeException
.RuntimeException
s n'ont pas à être traitées. À partir de la documentation de l'API Java: