例如:
public void foo(string something, Boolean flag, Object obj){
try{
if(flag){
//some code
}
} catch(Exception e) {
// handle exception
}
}
public void doo(string something, Boolean flag){
try{
if(flag){
//different code
}
} catch(Exception e) {
// handle exception
}
}
public void roo(string something, Boolean flag, Integer id){
try{
if(flag){
//a bit of code
}
} catch(Exception e) {
// handle exception
}
}
我的问题是,有没有办法在每个函数中没有所有重复代码(例如try-catch块和ifs)?它会真正清理我的项目,并帮助我专注于重要的代码。
答案 0 :(得分:4)
如何将Runnable
传递给捕获异常的新方法?
public void foo(String something, Boolean flag, Object obj) {
runSafe(something, flag, () => /*some code capturing obj*/);
}
public void doo(String something, Boolean flag) {
runSafe(something, flag, () => /*different code*/);
}
public void roo(String something, Boolean flag, Integer id) {
runSafe(something, flag, () => /*some code capturing id*/);
}
private void runSafe(string something, Boolean flag, Runnable r) {
try {
if (flag) {
r.run();
}
} catch(Exception e) {
// handle exception
}
}
但是,传递一个表示是否执行代码的布尔值对我来说是错误的。为什么不使用这些方法的某种空对象实现(什么都不做)而不是传递false?
答案 1 :(得分:0)
您可以使用try-catch包围此方法的调用。如果每个Exception都需要一个唯一的响应,您可以创建一个扩展Exception的对象,或者只使用带有字符串消息的Exception构造函数。
答案 2 :(得分:0)
这可能不是您想听到的,但您可能需要考虑减少try / catch块。
https://softwareengineering.stackexchange.com/questions/145941/efficient-try-catch-block-usage