如何忽略 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 在这方面做得很好。
我有以下代码:
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 在这方面做得很好。