Dom4j: ошибка "несовместимые типы" при компиляции - PullRequest
0 голосов
/ 07 октября 2011

Я занимаюсь разработкой небольшого настольного приложения на 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 ]

5 голосов
/ 07 октября 2011

Это является следствием того факта, что универсальные java-коллекции не являются «ковариантными».Метод selectNodes () возвращает список объектов, каждый из которых реализует Node.Но это не List<Node>.Вы должны изменить объявление на

List<? extends Node> nodes=...
4 голосов
/ 07 октября 2011

Поскольку сигнатура метода -

List<? extends Node> selectNodes(String)

, ваша переменная nodes должна иметь тип List<? extends Node>, а не тип List<Node>.

A List<Node> принимает любыеNode экземпляр как элемент.Принимая во внимание, что List<? extends Node> является List<Node>, или List<Element>, или List<Attribute>, или списком некоторого другого подкласса Node.Вы просто не знаете, какой именно.

...