Dom4j:编译时出现“不兼容的类型”错误

时间:2011-10-07 06:19:34

标签: java dom4j

我正在用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
          }
        }

2 个答案:

答案 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的其他子类的列表。你只是不知道哪一个。