首页 > 解决方案 > 无法从列表中投射列出

问题描述

每个人。我正在练习 dom4j 和 Xpath,但遇到了一个问题。

我试着:

List<Element> conList = (List<Element>)doc.selectNodes("//contact");

但出现错误:

Cannot cast from List<Node> to List<Element>

该代码在教学视频中似乎运行良好,但在我的计算机中不起作用。

算不算违法操作?我可以通过其他方式解决问题吗?谢谢。

标签: javaxpathdom4j

解决方案


您不能以这种方式简单地使用具体参数强制转换基于泛型的对象。

实现目标的一种不错的 java8 方法是:

List<Element> conList = doc.selectNodes("//contact")
.stream()
.map(node->(Element)node)
.collect(Collectors.toList());

请注意,对于您不知道列表元素是否实际上是目标类或接口的实例的一般情况,您可能希望通过过滤来断言

List<Element> conList = doc.selectNodes("//contact")
.stream()
.filter(node->node instanceof Element)
.map(node->(Element)node)
.collect(Collectors.toList());

推荐阅读