java - 无法从列表中投射列出
问题描述
每个人。我正在练习 dom4j 和 Xpath,但遇到了一个问题。
我试着:
List<Element> conList = (List<Element>)doc.selectNodes("//contact");
但出现错误:
Cannot cast from List<Node> to List<Element>
该代码在教学视频中似乎运行良好,但在我的计算机中不起作用。
算不算违法操作?我可以通过其他方式解决问题吗?谢谢。
解决方案
您不能以这种方式简单地使用具体参数强制转换基于泛型的对象。
实现目标的一种不错的 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());
推荐阅读
- powershell - 使用多个 If/ElseIf 语句还是使用具有多个 OR 条件的单个 If 语句更有效?
- bash - 忽略差异中的正则表达式
- ios - 链接命令后的 React-native iOS 构建错误
- sql - 如何在postgresql中从当前日期生成最后7个日期的系列?
- javascript - 更新包含flask-socketio中消息列表的字典时出现线程错误异常
- reactjs - 我使用 axios 在我的发布请求中中止了请求
- reactjs - 在 reactJs 应用程序中检测 inAppBrowser
- c# - 导航属性上的 LINQ 过滤器
- r - R闪亮和ggplot2:如何使geom_col的边框透明?
- python - 图表不显示时间线