我有一个类,我需要为每个方法添加try catch,但它看起来多余,所以我需要一个很好的方法来解决它,什么样的设计模式可以解决这个问题?
public class Test {
public void a() {
try {
do something;
} catch (Exception e) {
logger.error("error happened");
}
}
public void b() {
try {
do something;
} catch (Exception e) {
logger.error("error happened");
}
}
}
答案 0 :(得分:1)
如果你做的事情与try catch有相同的值,那么你可以这样说吧
public class Test {
public void a() {
//do other stuffs that don't require try catch and different from b
c(); //pass some values if you need too
}
public void b() {
//do other stuffs that don't require try catch and different from a
c(); //pass some values if you need too
}
public void c() { //catch values if you pass something from a and b
try {
do something;
} catch (Exception e) {
logger.error("error happened");
}
}//put return if you like.
}
但是如果你做了不同的事情并尝试捕获每种方法的价值,你真的必须这样做。
答案 1 :(得分:0)
为什么不尝试在方法之外捕获异常?
你只需要确保从这个方法中抛出什么异常
例如:
Test a = new Test();
try {
a.a();
a.b();
} catch (Exception e) {
logger.error("error happened");
}
答案 2 :(得分:0)
您可以使用"执行"来执行此操作。成语,但它不会为你节省太多样板。以下内容不太合适 - 您需要定义TestLambda
类。但有几点需要注意。
executeAround
将需要变体,具体取决于返回值等。TestLambda
定义需要抛出异常。 (标准的Java 8 lambdas没有。)
public static class Test {
public void a() {
executeAround( ()->{ do_something ; } );
}
public void b() {
executeAround( ()->{ do_something_else; } );
}
private void executeAround( TestLambda fn ) {
try {
fn();
} catch( Exception e) {
logger.error("error happened");
}
}
}
答案 3 :(得分:0)
实用解决方案之一是使用spring ExceptionHandler
等框架基本上,您在应用程序的较低层使用throws SomeException
并捕获顶层的所有内容
控制器:
@ExceptionHandler({SQLException.class,DataAccessException.class})
public String databaseError() {
return "databaseError";
}
以下图层:
public void doStufff throws SQLexception{
// do stuff which may throw exception
}