首先,我想断言我对编码还很陌生,所以这看起来很简单,但我无法弄清楚。
因此,我正在与一个使用JXBrowser从网站提取信息的现有项目一起工作。它使用方法getRecords()从网站对象中选择所有元素,并将其放入List (的一部分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!");
}
}
有人可以帮我吗?
谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述和代码片段来看,问题出在你尝试在Lambda表达式中直接返回结果,而这是不被允许的。Lambda表达式主要用于定义函数式接口的实现,它本身不能直接改变或结束包围它的方法的执行流程,比如直接返回一个值给外部方法。
要解决这个问题,你可以通过以下方式调整你的saveRecord
方法:
saveRecord
方法内部声明一个变量用于存储records
,然后在Lambda表达式内赋值,最后在方法末尾返回这个变量。下面是修改后的示例代码:
public List<YourRecordType> saveRecord() {
List<YourRecordType> result = null; // 声明一个外部变量来保存结果
if (website != null) {
browser.mainFrame().ifPresent(frame -> frame.document().ifPresent(document -> {
List<YourRecordType> records = website.getHandler().getRecords(document);
if (records.isEmpty()) {
log.error("no record found on site!");
} else {
result = records; // 将结果赋值给外部变量
}
}));
} else {
log.error("no handler found!");
}
return result; // 在方法末尾返回结果
}
请注意,我假设getRecords(document)
返回的是List<YourRecordType>
,你需要将YourRecordType
替换为实际的记录类型。此外,由于原始代码中的方法名是saveRecords()
(复数形式),但你在提问时提到了saveRecord()
(单数形式),为了保持一致性,这里使用了saveRecord()
,请根据实际情况调整。
这样修改后,无论Lambda表达式内部发生了什么,最终都会返回result
变量的值,解决了“意外的返回值”错误。