开发者社区 问答 正文

使用List <Element>的方法中的“意外返回值”

首先,我想断言我对编码还很陌生,所以这看起来很简单,但我无法弄清楚。

因此,我正在与一个使用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!");
  }
}

有人可以帮我吗?

谢谢!

展开
收起
几许相思几点泪 2019-12-08 21:47:26 476 分享 版权
阿里云 AI 助理回答

从你的描述和代码片段来看,问题出在你尝试在Lambda表达式中直接返回结果,而这是不被允许的。Lambda表达式主要用于定义函数式接口的实现,它本身不能直接改变或结束包围它的方法的执行流程,比如直接返回一个值给外部方法。

要解决这个问题,你可以通过以下方式调整你的saveRecord方法:

  1. 声明一个外部变量来保存结果:可以在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变量的值,解决了“意外的返回值”错误。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: