"Unexpected Return Value" 在使用 List<Element> 的方法中
"Unexpected Return Value" in Method that uses List<Element>
首先我想指出我对编码很陌生,所以这看起来很简单,但我就是想不通。
我正在处理一个使用 JXBrowser 从网站提取信息的现有项目。它从网站对象中选择所有具有方法 getRecords()
的元素,并将其放入 List<Element>
(import java.util.List
的一部分)。这段代码是浏览器管理器 Class 内部的一个方法,它创建并处理 JXBrowser 实例。
我想要 saveRecords()
方法从网站中提取数据并 return 列表到我的主要作业执行器。但是,我的 IDE 将 return records
部分标记为错误 - "Unexpected return value"。
我怀疑这可能与使用匿名方法有关,这不是我自己写的,也没有任何经验。
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!");
}
}
您需要在方法末尾添加 return 语句。如果结果为空,您可以 return 清空列表或抛出异常。
您没有从您的方法中 returning 任何东西,它应该 return 一个 List<Element>
。另一方面,您从传递给 Optional.ifPresent()
, although the lambda is supposed to be a Consumer
的函数 (lambda) returning(但并非在所有情况下),因此不应该 return 任何东西。
如果您不了解作为回调传递给方法的函数 (lambda) 的原理,我建议您在使用它们之前先研究一下。或者继续使用命令式编程,只需使用 Optional.isPresent()
后跟 Optional.get()
来测试可选值是否有值并在它存在时获取它。
如果你想使用函数式编程,那么你不应该使用 ifPresent()
。您应该改为使用 map()
、flatMap()
和 orElse
将您的 Optional 转换为一个值。
在任何情况下,您首先需要决定的是如果记录为空怎么办,如果网站为空怎么办。你不能只是不做任何你想做的事情。要么你 return 一些东西(例如一个空列表),要么你抛出一个异常。但是你不能只记录一个 not return.
首先我想指出我对编码很陌生,所以这看起来很简单,但我就是想不通。
我正在处理一个使用 JXBrowser 从网站提取信息的现有项目。它从网站对象中选择所有具有方法 getRecords()
的元素,并将其放入 List<Element>
(import java.util.List
的一部分)。这段代码是浏览器管理器 Class 内部的一个方法,它创建并处理 JXBrowser 实例。
我想要 saveRecords()
方法从网站中提取数据并 return 列表到我的主要作业执行器。但是,我的 IDE 将 return records
部分标记为错误 - "Unexpected return value"。
我怀疑这可能与使用匿名方法有关,这不是我自己写的,也没有任何经验。
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!");
}
}
您需要在方法末尾添加 return 语句。如果结果为空,您可以 return 清空列表或抛出异常。
您没有从您的方法中 returning 任何东西,它应该 return 一个 List<Element>
。另一方面,您从传递给 Optional.ifPresent()
, although the lambda is supposed to be a Consumer
的函数 (lambda) returning(但并非在所有情况下),因此不应该 return 任何东西。
如果您不了解作为回调传递给方法的函数 (lambda) 的原理,我建议您在使用它们之前先研究一下。或者继续使用命令式编程,只需使用 Optional.isPresent()
后跟 Optional.get()
来测试可选值是否有值并在它存在时获取它。
如果你想使用函数式编程,那么你不应该使用 ifPresent()
。您应该改为使用 map()
、flatMap()
和 orElse
将您的 Optional 转换为一个值。
在任何情况下,您首先需要决定的是如果记录为空怎么办,如果网站为空怎么办。你不能只是不做任何你想做的事情。要么你 return 一些东西(例如一个空列表),要么你抛出一个异常。但是你不能只记录一个 not return.