gpt4 book ai didi

java - 如何用相同的重复代码块包围不同的代码块?同时能够返回不同的值

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:34 25 4
gpt4 key购买 nike

例如:

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 block 和 ifs)?它确实会清理我的项目,并帮助我专注于重要的代码。

我已经问过这个关于 void 函数的问题,并注意到建议的解决方案(使用可运行的)不适用于返回类型不是 null 的函数。有其他方法可以实现吗?

链接到我之前的(非常相关的)问题:How do I surround different blocks of code with the same repeating block of code?

最佳答案

当您需要返回值时,可以使用 Callable 而不是 Runnable。我修改了乔弗里在另一个线程中给出的示例:

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;
}
}

关于java - 如何用相同的重复代码块包围不同的代码块?同时能够返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46419072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com