问题描述
object RetryUtil {
def retry[T](retry: Int,timeout: FiniteDuration)(exc: => T): T = {
//
}
}
public class SuperService {
public <T> T call(Data<T> data) {
// I want to call internalCall from here,with the Scala retry mechanism from before.
}
private <T> T internalCall(DataWithResult<T> data) {
}
}
应该怎么做?
谢谢。
解决方法
对于
private <T> T internalCall(TransactionWithResult<T> data) {
return null;
}
private void internalCall2(TransactionWithoutResult data) {
}
尝试
public <T> T call(Data<T> data) {
RetryUtil.retry(3,new FiniteDuration(1,TimeUnit.MINUTES),() -> { internalCall2(data); return null; });
return RetryUtil.retry(3,() -> internalCall(data));
}
Scala中多个参数列表中的参数在Java中应视为单个参数列表的参数。
Scala和Java函数应该可以互换(从Scala 2.12开始)
How to use Java lambdas in Scala(https://stackoverflow.com/a/47381315/5249621)
按名称参数=> T
应该被视为无参数函数() => T
。
我假设Data
实现了TransactionWithResult
和TransactionWithoutResult
,所以可以在需要Data
或TransactionWithResult
的地方使用TransactionWithoutResult
,否则代码应该是固定的。