【发布时间】:2016-02-16 21:17:17
【问题描述】:
这段代码在processBatch(batch, this::backupMetacard); 行给我一个编译错误。处理批处理方法将使用者包装在一个try/catch 块中,但Java 不会编译该调用。
private synchronized void drain() {
for (List<Metacard> batch : Lists.partition(metacards, BATCH_SIZE)) {
getExecutor().submit(() -> {
processBatch(batch, this::backupMetacard);
});
}
metacards.clear();
}
void processBatch(List<Metacard> metacards, Consumer<Metacard> operation) {
List<String> errors = new ArrayList<>();
for (Metacard metacard : metacards) {
try {
operation.accept(metacard);
} catch (IOException e) {
errors.add(metacard.getId());
}
}
if (!errors.isEmpty()) {
LOGGER.info("Plugin processing failed. This is allowable. Skipping to next plugin.",
pluginExceptionWith(errors));
}
}
private void backupMetacard(Metacard metacard) throws IOException {...}
【问题讨论】:
-
try-catch 部分在哪里?
-
@Tunaki try{} 将 operation.accept 调用包装在 processBatch 方法中。
-
一个可能的问题是函数签名没有声明它会引发错误。也许替换为
void processBatch(List<Metacard> metacards, Consumer<Metacard> operation) throws IOException()。