"Unexpected Return Value" in 使用列表<Element>的方法



我想首先指出,我对编码很陌生,所以这可能看起来很简单,但我就是想不通。

我正在使用一个现有项目,该项目使用 JXBrowser 从网站中提取信息。它使用方法从网站对象中选择所有元素getRecords()并将其放入List<Element>(import java.util.List的一部分(。这段代码是浏览器管理器类中的一个方法,用于创建和处理 JXBrowser 实例。

我希望saveRecords()方法从网站中提取数据并将列表返回到我的主作业执行器。但是,我的 IDE 将return records部分标记为错误 - "意外返回值"。

我怀疑这可能与使用匿名方法有关,这种方法不是我自己写的,也没有任何经验。

public List<Element> saveRecord() {
if (website != null) {
browser.mainFrame().ifPresent(frame -> frame.document().ifPresent(document -> {
List <Element> records = website.getHandler().getRecords(document);
if (records.isEmpty()) {
log.error("no record found on site!");
} else {
return records;
}
}));
} else {
log.error("no handler found!");
}
}

您没有从方法中返回任何内容,该方法应返回一个List<Element>。另一方面,你从传递给Optional.ifPresent()的函数(lambda(返回(但并非在所有情况下(,尽管lambda应该是一个Consumer,因此不应该返回任何东西。

如果您不了解作为方法回调传递的函数(lambdas(的原理,我建议您在使用它们之前先研究一下。或者,只需使用Optional.isPresent()后跟Optional.get()来测试可选值并获取它(如果存在(,以保持命令式编程。

如果你想使用函数式编程,那么你不应该使用ifPresent()。您应该改用map()flatMap()orElse将 Optional 转换为值。

在所有情况下,您需要决定的第一件事是如果记录为空该怎么办,如果网站为空该怎么办。你不能像你想做的那样什么都不做。要么返回一些东西(例如空列表(,要么抛出异常。但你不能只是记录一个不返回。

你需要在方法末尾返回语句。如果结果为空,则可以返回空列表或抛出异常。

最新更新