web-dev-qa-db-fra.com

Comment ignorer les exceptions dans Java

J'ai le code suivant:

TestClass test=new TestClass();
test.setSomething1(0);  //could, but probably won't throw Exception
test.setSomething2(0);  //could, but probably won't throw Exception

Je voudrais exécuter: test.setSomething2(0); même si test.setSomething(0) (la ligne au-dessus) lève une exception. Y a-t-il un moyen de faire cela AUTRE que:

try{
   test.setSomething1(0);
}catch(Exception e){
   //ignore
}
try{
   test.setSomething2(0);
}catch(Exception e){
   //ignore
}

J'ai beaucoup de test.setSomething dans une rangée et tous pourraient lever des exceptions. S'ils le font, je veux juste sauter cette ligne et passer à la suivante.

Par souci de clarté, je m'en fiche s'il lève une exception, et je ne peux pas modifier le code source du code qui lève cette exception.

CECI IS UN CAS OERE JE NE ME SOUCIE PAS DES EXCEPTIONS (veuillez ne pas utiliser d'instructions quantifiées universellement comme "vous ne devriez jamais ignorer les exceptions"). Je fixe les valeurs de certains objets. Lorsque je présente les valeurs à un utilisateur, je vérifie quand même la valeur null, donc peu importe si l'une des lignes de code s'exécute.

14
Nick

Je doute sérieusement de la santé mentale de tout code de test qui ignore les exceptions levées à partir du code testé. Cela dit, et en supposant que vous savez ce que vous faites ... il n'y a aucun moyen d'ignorer fondamentalement une exception levée. Le mieux que vous puissiez faire est de minimiser le passe-partout dont vous avez besoin pour encapsuler le code de lancement d'exception.

Si vous êtes sur Java 8, vous pouvez utiliser ceci:

public static void ignoringExc(RunnableExc r) {
  try { r.run(); } catch (Exception e) { }
}

@FunctionalInterface public interface RunnableExc { void run() throws Exception; }

Ensuite, et impliquant des importations statiques, votre code devient

ignoringExc(() -> test.setSomething1(0));
ignoringExc(() -> test.setSomething2(0));
19
Marko Topolnik
try {
 // Your code...
} catch (Exception ignore) { }

Utilisez le mot ignore après le mot clé Exception.

14
Joe Almore

Vous ne pouvez pas ignorer l'exception en Java. Si une méthode déclare pouvoir lancer quelque chose, c'est parce que quelque chose d'important ne peut pas être fait et que l'erreur ne peut pas être corrigée par le concepteur de la méthode. Donc, si vous ne voulez vraiment pas simplifier votre vie, encapsulez l'appel de méthode dans une autre méthode comme celle-ci:

class MyExceptionFreeClass {
  public static void setSomething1(TestClass t,int v) {
    try {
      t.setSomething1(v);
    } catch (Exception e) {}
  public static void setSomething2(TestClass t,int v) {
    try {
      t.setSomething2(v);
    } catch (Exception e) {}
}

et appelez-le quand vous en avez besoin:

TestClass test=new TestClass();
MyExceptionFreeClass.setSomething1(test,0);
MyExceptionFreeClass.setSomething2(test,0);
2
Jean-Baptiste Yunès

Malheureusement non, il n'y en a pas, et c'est par intention. Lorsqu'elles sont utilisées correctement, les exceptions ne doivent pas être ignorées car elles indiquent que quelque chose n'a pas fonctionné et que vous ne devriez probablement pas continuer sur votre chemin d'exécution normal. Ignorer complètement les exceptions est un exemple de l'anti-modèle `` Balayez sous le tapis '', c'est pourquoi le langage ne prend pas en charge le faire si facilement.

Vous devriez peut-être vous demander pourquoi TestClass.setSomething lève des exceptions. Est-ce que tout ce que vous essayez de "tester" sera vraiment valable si un tas de méthodes de définition ne fonctionnent pas correctement?

1
Dogs

Vous ne devez pas ignorer les exceptions. Vous devez les manipuler. Si vous souhaitez simplifier votre code de test, ajoutez le bloc try-catch dans vos fonctions. La meilleure façon d'ignorer les exceptions est de les empêcher par un codage approprié.

0
Lajos Arpad

IntelliJ Idea IDE suggère de renommer une variable en ignored

quand il n'est pas utilisé.

Ceci est mon exemple de code.

try {
    messageText = rs.getString("msg");
    errorCode = rs.getInt("error_code");
} catch (SQLException ignored) { }
0
ivanoklid

Je sais que c'est vieux, mais je pense qu'il y a des occasions où vous voulez ignorer une exception. Considérez que vous avez une chaîne qui contient un ensemble délimité de parties à analyser. Mais, cette chaîne peut parfois contenir disons 6, 7 ou 8 parties. Je ne pense pas que vérifier le len à chaque fois afin d'établir qu'un élément existe dans le tableau soit aussi simple que de simplement saisir l'exception et de continuer. Par exemple, j'ai une chaîne délimitée par le caractère '/' que je veux séparer:

public String processLine(String inLine) {
    partsArray = inLine.split("/");

    //For brevity, imagine lines here that initialize
    //String elems[0-7] = "";

    //Now, parts array may contains 6, 7, or 8 elements
    //But if less than 8, will throw the exception
    try {
        elem0 = partsArray[0];
        elem1 = partsArray[1];
        elem2 = partsArray[2];
        elem3 = partsArray[3];
        elem4 = partsArray[4];
        elem5 = partsArray[5];
        elem6 = partsArray[6];
        elem7 = partsArray[7];
    catch (ArrayIndexOutOfBoundsException ignored) { }

    //Just to complete the example, we'll append all the values
    //and any values that didn't have parts will still be
    //the value we initialized it to, in this case a space.
    sb.append(elem0).append(elem1).append(elem2)...append(elem7);

    //and return our string of 6, 7, or 8 parts
    //And YES, obviously, this is returning pretty much
    //the same string, minus the delimiter.
    //You would likely do things to those elem values
    //and then return the string in a more formatted way.
    //But was just to put out an example where
    //you really might want to ignore the exception
    return sb.toString();
}
0
user25839