gpt4 book ai didi

java - 使用函数接口(interface)抽象公共(public)代码的问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:10 24 4
gpt4 key购买 nike

这里我实现了以下两个功能,如下所示:

  Output1 computeFirst(Input1 input) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);

try{

#critical section

}catch(Exception e){
log.error(e);
}finally{
releaseLock(lockItem);
}
}




Output2 computeSecond(Input2 input) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);

try{

#critical section

}catch(Exception e){
log.error(e);
}finally{
releaseLock(lockItem);
}
}

以上两个函数在不同的流程中被调用。

从上面两个函数中,我想通过编写一个如下所示的函数来抽象出 acquireLock 和 releaseLock 功能:

executeWithLock(String lockName, funcionReference) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);
try{
func.apply
} catch(Exception e){
log.error(e);
} finally {
releaseLock(lockItem);

}
}

我无法弄清楚如何实现这个executeWithLock函数,在这种情况下,我已经浏览了stackoverflow中关于如何将函数作为参数传递的相关帖子,但不太理解。

最佳答案

Runnable 无法工作,因为也有输出。

public interface Identifiable{
String getId();
}

public static <T extends Identifiable,R> R executeWithLock(T input, Function<T,R> func) {
String lockName = input.getId();
LockItem lockItem = acquireLock(lockName);
try{
return func.apply(input);
} catch(Exception e){
log.error(e);
return null;
} finally {
releaseLock(lockItem);
}
}

调用类似

Output1 output = executeWithLock(input1, 
(input) -> {return /*compute output as in critical section*/ null;});

关于java - 使用函数接口(interface)抽象公共(public)代码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51157631/

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