gpt4 book ai didi

java - 可传递参数的 Callable 替代品

转载 作者:行者123 更新时间:2023-11-30 06:29:31 25 4
gpt4 key购买 nike

我有很多代码,每个函数都以相同的方式开始和结束。所以我开始使用 Callable 来让它更清晰。但我想做的是以某种方式获取每个函数(foo/doo/roo)的“检查”对象,但调用方法不允许发送参数。有更好的方法吗?

public void foo(String something, Boolean flag, Object obj) {
callSafe(something, flag, () => /*some code capturing obj*/);
}

public void doo(String something, Boolean flag) {
callSafe(something, flag, () => /*different code using check*/);
}

public void roo(String something, Boolean flag, Integer id) {
callSafe(something, flag, () => /*some code using check*/);
}

private void callSafe(string something, Boolean flag, Callable<T> c) {
try {
Object check = someFunction(flag, something);
if (check.IsTrue()) {
c.call();
//c.call(check); //What I want to do.
}
} catch(Exception e) {
// handle exception
}
}

我想我可以运行“someFunction”两次(一次在可调用函数中,一次在实际函数中),但该函数很慢,我不想这样做。

编辑:通过添加接口(interface)并使用 @Eran 建议的方法修复了它。界面:

@FunctionalInterface
public interface CheckedFunction<T, R> {
R apply(T t) throws Exception;
}

我不确定这是否是一个好的做法。有什么想法吗?

最佳答案

我不确定Callable首先是合适的,因为 call方法返回一个值,您可以忽略该值。

您可以使用 Consumer<SomeClass> ,其中有 accept(SomeClass t)方法。

private void callSafe(String something, Boolean flag, Consumer<SomeClass> c) {
try {
SomeClass check = someFunction(flag, something);
if (check.IsTrue()) {
c.accept (check);
}
} catch(Exception e) {
// handle exception
}
}

public void roo(String something, Boolean flag, Integer id) {
callSafe(something, flag, (SomeClass check) -> /*some code using check*/);
}

如果您确实需要返回值,可以使用 Function<T, R> ,其中有 R apply(T t)方法:

private void callSafe(String something, Boolean flag, Function<SomeClass,ReturnClass> f) {
try {
SomeClass check = someFunction(flag, something);
if (check.IsTrue()) {
f.apply (check);
}
} catch(Exception e) {
// handle exception
}
}

public void roo(String something, Boolean flag, Integer id) {
callSafe(something, flag, (SomeClass check) -> /*some code using check which return an instance of ReturnClass*/);
}

关于java - 可传递参数的 Callable<T> 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46420700/

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