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

时间:2019-12-08 13:30:59

标签: java return jxbrowser

我首先要指出我对编码还很陌生,所以这似乎很简单,但是我无法弄清楚。

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

2 个答案:

答案 0 :(得分:1)

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

如果您不了解作为方法的回调传递的函数(lambda)的原理,建议您在使用它们之前进行研究。或通过只使用Optional.isPresent()后跟Optional.get()来测试命令选项是否具有值并在存在时获取它,来保持命令式编程。

如果要使用函数式编程,则不应使用ifPresent()。相反,您应该使用map()flatMap()orElse将您的Optional转换为值。

在所有情况下,您需要决定的第一件事是,如果记录为空,该怎么办;如果网站为空,该怎么办。您不能只是不尝试做任何事情。您返回某些内容(例如,一个空列表),或者引发异常。但是你不能只记录不返回。

答案 1 :(得分:0)

您需要在方法末尾使用return语句。如果结果为空,则可以返回空列表或引发异常。