例如:
public Object foo(string something, Boolean flag, Object obj){
try{
if(flag){
//some code
}
} catch(Exception e) {
// handle exception
}
}
public Object doo(string something, Boolean flag){
try{
if(flag){
//different code
}
} catch(Exception e) {
// handle exception
}
}
public Object roo(string something, Boolean flag, Integer id){
try{
if(flag){
//a bit of code
}
} catch(Exception e) {
// handle exception
}
}
我的问题是,有没有办法在每个函数中没有所有重复代码(例如try-catch块和ifs)?它会真正清理我的项目,并帮助我专注于重要的代码。
我已经问过这个关于void函数的问题,并注意到所提出的解决方案(使用runnable)对返回类型不是null的函数不起作用。有没有不同的方法来实现这个?
链接到我之前(和非常相关)的问题:How do I surround different blocks of code with the same repeating block of code?
答案 0 :(得分:0)
当您需要返回值时,可以使用Callable而不是Runnable。我修改了Joffrey在另一个帖子中给出的例子:
class CallableExample {
public static void main(String[] args) {
CallableExample ce = new CallableExample();
System.out.println(ce.foo("", true, ""));
System.out.println(ce.doo("", true));
System.out.println(ce.roo("", true, 1));
}
public Object foo(String something, Boolean flag, Object obj) {
return runCallable(something, flag, new Callable() {
@Override
public Object call() throws Exception {
return "foo";
}
});
}
public Object doo(String something, Boolean flag) {
return runCallable(something, flag, new Callable() {
@Override
public Object call() throws Exception {
return "doo";
}
});
}
public Object roo(String something, Boolean flag, Integer id) {
return runCallable(something, flag, new Callable() {
@Override
public Object call() throws Exception {
return "roo";
}
});
}
private Object runCallable(String something, Boolean flag, Callable c) {
Object result = null;
try {
if (flag) {
result = c.call();
}
} catch(Exception e) {
// handle exception
}
return result;
}
}
答案 1 :(得分:0)
查看Template Method设计模式和Execute Around习语。但是,如果您发现自己经常编写捕获异常的代码,那就是设计嗅觉:问问自己为什么要这样做,如果确实有必要的话。通常让异常传播到调用上下文更好。
答案 2 :(得分:0)
为什么在不同的方法中使用相同的代码,而是使用带有try catch的if-else-if逻辑为同一组代码编写单个函数并最小化代码 例如:
public Object foo(string something, Boolean flag, Object obj) {
try {
//convert the object type to primitive type data like int, String or any
if(flag) {
//your code
}
catch(Exception ex) {
//your code
}
//return the object;
}
将对象类型数据转换为基本类型并相应地使用它 如果逻辑
,请使用if else