java类中多个方法的单个Catch块
我有一个带有静态方法的类来处理MemCache请求,它有不同的方法和不同的参数 每当在该类中调用某个方法时,我想递增totalRequest计数器,如果类中的任何方法发生异常,我想递增一个失败的计数器。有什么办法吗java类中多个方法的单个Catch块,java,class,optimization,exception-handling,Java,Class,Optimization,Exception Handling,我有一个带有静态方法的类来处理MemCache请求,它有不同的方法和不同的参数 每当在该类中调用某个方法时,我想递增totalRequest计数器,如果类中的任何方法发生异常,我想递增一个失败的计数器。有什么办法吗 如果自然界中的静态存在一些问题,请告诉我?而且它应该是一个有效的方法。我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装 还有,但我从来没有用过 最后,您可以将调用封装在调用方方法中。有了Jav
如果自然界中的静态存在一些问题,请告诉我?而且它应该是一个有效的方法。我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装 还有,但我从来没有用过 最后,您可以将调用封装在调用方方法中。有了Java 8和lambda,它将是这样的:
protected <T> T callWithTrace(Supplier<T> fn) throws Exception {
//some code before the call
try {
T output=fn.get();
//code after normal exec
return output;
}
catch(Exception e) {
//code in case of error (increase counter??)
throw e;
}
}
void someOtherMethod() {
Object ret = callWithTrace({ () -> callToYourDangerousMethod()});
Object ret = callWithTrace({ () -> callToAnotherDangerousMethod()});
}
protected T callWithTrace(供应商fn)引发异常{
//通话前的一些代码
试一试{
T输出=fn.get();
//正常执行后的代码
返回输出;
}
捕获(例外e){
//错误情况下的代码(增加计数器??)
投掷e;
}
}
void someOtherMethod(){
Object ret=callWithTrace({()->callToYourDangerousMethod()});
Object ret=callWithTrace({()->callToAnotherDangerMethod()});
}
在Java7中,您也可以使用匿名内部类,但这很难阅读。我会使用AOP。如果您使用或Maven,它很容易在您的bean周围放置到位。您将声明一个拦截器,Guice或Maven将围绕您的方法进行包装 还有,但我从来没有用过 最后,您可以将调用封装在调用方方法中。有了Java 8和lambda,它将是这样的:
protected <T> T callWithTrace(Supplier<T> fn) throws Exception {
//some code before the call
try {
T output=fn.get();
//code after normal exec
return output;
}
catch(Exception e) {
//code in case of error (increase counter??)
throw e;
}
}
void someOtherMethod() {
Object ret = callWithTrace({ () -> callToYourDangerousMethod()});
Object ret = callWithTrace({ () -> callToAnotherDangerousMethod()});
}
protected T callWithTrace(供应商fn)引发异常{
//通话前的一些代码
试一试{
T输出=fn.get();
//正常执行后的代码
返回输出;
}
捕获(例外e){
//错误情况下的代码(增加计数器??)
投掷e;
}
}
void someOtherMethod(){
Object ret=callWithTrace({()->callToYourDangerousMethod()});
Object ret=callWithTrace({()->callToAnotherDangerMethod()});
}
使用Java 7,您也可以使用匿名内部类,但这很难阅读。感谢您的回复,您能否提供一些关于AOP的链接,如何通过一个简单的示例实现这一点,哪一个更适合实际项目?我已经阅读了该链接,它非常有用,因为我正在处理一个实际项目,实现Guice将是一项非常昂贵的任务,可能我现在无法使用它!还有别的办法吗?可能是一些设计模式,我可以实现没有太多的依赖性的变化,增加了一个lambda解决方案谢谢你的回答,你能提供一些关于AOP的链接,如何实现这一点,一个简单的例子,哪一个更适合于真正的项目?我读了链接,这是非常有帮助的,因为我正在从事一个真正的项目,实现Guice将是一项非常昂贵的任务,可能我现在无法使用它!还有别的办法吗?可能是一些设计模式,我可以实现没有太多的依赖性的变化,增加了一个lambda解决方案