我正在用Java开发一个小型桌面应用程序。我遇到了一个需要从XML文件中读取数据的点,为此我使用的是Dom4j库。虽然编码我面临以下错误,任何人都可以指导我解决此错误:
public void FromXML(String sXMLFileURI)
{//Reads the XML File and Stroe Data in Calling Object
Document document = getDocument( sXMLFileURI );
String xPath = "myXpath";
List<Node> nodes = document.selectNodes( xPath );//This line gives the followiing error:
//error "incompatible types
//required: java.util.List<org.dom4j.Node>
//found: java.util.List<capture#1 of ? extends org.dom4j.Node>"
for (Node node : nodes)
{
//some processing here
}
}
答案 0 :(得分:5)
这是因为java泛型集合不是“协变”的。方法selectNodes()返回一个对象列表,所有对象都实现Node。但这不是List<Node>
。您必须将声明更改为
List<? extends Node> nodes=...
答案 1 :(得分:4)
由于方法签名是
List<? extends Node> selectNodes(String)
您的变量nodes
应为List<? extends Node>
类型,而不是List<Node>
类型。
List<Node>
接受任何Node
个实例作为元素。而List<? extends Node>
是List<Node>
,List<Element>
或List<Attribute>
,或Node
的其他子类的列表。你只是不知道哪一个。