#java #dom4j
#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
}
}
Ответ №1:
Это следствие того факта, что общие коллекции java не являются «ковариантными». Метод SelectNodes() возвращает список объектов, все из которых реализуют узел. Но это не List<Node>
. Вы должны изменить объявление на
List<? extends Node> nodes=...
Ответ №2:
Поскольку сигнатура метода
List<? extends Node> selectNodes(String)
ваша переменная nodes
должна иметь тип List<? extends Node>
, а не тип List<Node>
.
A List<Node>
принимает любой Node
экземпляр в качестве элемента. Тогда как a List<? extends Node>
— это a List<Node>
, или a List<Element>
, или a List<Attribute>
, или список какого-либо другого подкласса Node
. Вы просто не знаете, какой из них.