0

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

2 回答 2

5

这是 java 泛型集合不是“协变”的事实的结果。方法 selectNodes() 返回一个对象列表,所有这些对象都实现了 Node。但这不是一个List<Node>. 您必须将声明更改为

List<? extends Node> nodes=...
于 2011-10-07T06:52:46.403 回答
4

由于方法签名是

List<? extends Node> selectNodes(String)

你的变量nodes应该是 type List<? extends Node>,而不是 type List<Node>

AList<Node>接受任何Node实例作为元素。而 aList<? extends Node>List<Node>, 或List<Element>, 或List<Attribute>, 或 的某个其他子类的列表Node。你只是不知道是哪一个。

于 2011-10-07T06:51:44.123 回答