【发布时间】:2018-11-08 23:44:50
【问题描述】:
我正在使用 Spring RetryTemplate 并使用此方法。想要传递一些参数(供应商)它给了我编译错误。我可以创建另一个变量 vendorName 作为 final 可以发送它。但我想使用变量vendor。它一定很简单,但没有得到它。请帮忙。
public Token getToken(final String tokenId) {
String vendor = getVendor(tokenId);//returns some vendor name
RetryTemplate retryTemplate = getRetryTemplate();
Token token = retryTemplate.execute(context -> {
logger.info("Attempted {} times", context.getRetryCount());
return retrieveToken(tokenId, vendor);
});
}
private RetryTemplate getRetryTemplate() {
final FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(getRandomNumber() * 1000);
final SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
final RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
编译错误是:在封闭范围内定义的局部变量 vendor 必须是 final 或有效 final
【问题讨论】:
-
那么,究竟是什么编译错误呢?
-
我更新错误。它是相关的java lambda传递参数。
-
@Kiran
vendor从我能观察到的看来实际上是最终结果 -
该代码不会产生该错误。
标签: java lambda java-8 spring-retry retrytemplate