我首先要指出我对编码还很陌生,所以这似乎很简单,但是我无法弄清楚。
我正在与一个使用JXBrowser从网站提取信息的现有项目一起工作。它从网站对象中使用方法getRecords()
选择所有元素,并将其放入List<Element>
(import java.util.List
的一部分)中。这段代码是Browser Manager类中的一种方法,该方法创建并处理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!");
}
}
答案 0 :(得分:1)
您没有从方法中返回任何内容,该方法应该返回一个List<Element>
。另一方面,您虽然要从传递给Optional.ifPresent()
的函数(lambda)中返回(但并非在所有情况下),但是lambda应该是Consumer
,因此不应返回任何东西。
如果您不了解作为方法的回调传递的函数(lambda)的原理,建议您在使用它们之前进行研究。或通过只使用Optional.isPresent()
后跟Optional.get()
来测试命令选项是否具有值并在存在时获取它,来保持命令式编程。
如果要使用函数式编程,则不应使用ifPresent()
。相反,您应该使用map()
,flatMap()
和orElse
将您的Optional转换为值。
在所有情况下,您需要决定的第一件事是,如果记录为空,该怎么办;如果网站为空,该怎么办。您不能只是不尝试做任何事情。您返回某些内容(例如,一个空列表),或者引发异常。但是你不能只记录不返回。
答案 1 :(得分:0)
您需要在方法末尾使用return语句。如果结果为空,则可以返回空列表或引发异常。