如何忽略 Java 中的异常

How to ignore Exceptions in Java

我有以下代码:

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

我想执行:test.setSomething2(0); 即使 test.setSomething(0)(它上面的行)抛出异常。除了:

,还有其他方法可以做到这一点吗?
try{
   test.setSomething1(0);
}catch(Exception e){
   //ignore
}
try{
   test.setSomething2(0);
}catch(Exception e){
   //ignore
}

我有很多连续的 test.setSomething,它们都可能抛出异常。如果他们这样做,我只想跳过那行并转到下一行。

澄清一下,我不关心它是否抛出异常,而且我无法编辑抛出此异常的代码的源代码。

这是一个我不关心异常的案例(请不要使用像 "you should never ignore Exceptions" 这样的通用量化语句)。我正在设置一些对象的值。当我将这些值呈现给用户时,无论如何我都会进行空值检查,因此是否执行任何代码行实际上并不重要。

很遗憾,没有,这是故意的。如果使用得当,异常不应被忽略,因为它们表明某些东西没有工作,你可能不应该继续你的正常执行路径。完全忽略异常是 'Sweep it under the rug' 反模式的一个例子,这就是为什么该语言不支持如此轻易地这样做的原因。

也许您应该看看 TestClass.setSomething 抛出异常的原因。如果一堆 setter 方法无法正常工作,您尝试 'test' 的任何东西真的有效吗?

您不应该忽略异常。你应该处理它们。如果你想让你的测试代码简单,那么将 try-catch 块添加到你的函数中。忽略异常的最好方法是通过适当的编码来防止它们。

您不能忽略 Java 中的异常。如果一个方法声明能够抛出某些东西,这是因为一些重要的事情无法完成,并且方法设计者无法纠正错误。因此,如果您真的不想简化您的生活,请将方法调用封装在其他方法中,例如:

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) {}
}

并在需要时调用它:

TestClass test=new TestClass();
MyExceptionFreeClass.setSomething1(test,0);
MyExceptionFreeClass.setSomething2(test,0);

没有办法从根本上忽略抛出的异常。您能做的最好的事情就是最小化包装异常抛出代码所需的样板文件。

如果你在 Java 8,你可以使用这个:

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

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

然后,并暗示静态导入,您的代码变为

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

Exception 关键字后使用单词 ignore

IntelliJ Idea IDE 建议将变量重命名为 ignored

不使用时。

这是我的示例代码。

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

我知道这已经过时了,但我确实认为有些情况下您想要忽略异常。假设您有一个字符串,其中包含一组要解析的分隔部分。但是,这个字符串有时可以包含 6 或 7 或 8 个部分。我不认为每次检查 len 以建立数组中存在的元素与简单地捕获异常并继续进行一样简单。例如,我有一个由 '/' 字符分隔的字符串,我想将其分开:

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();
}

写空catch块的人将永远在地狱中燃烧。

或者更糟的是,他们将被迫永远调试他们写的该死的垃圾。

也就是说,您可能想要做的一件事是以不太冗长的方式编写异常处理。 NoException library 在这方面做得很好。