为什么javax.xml.stream.XMLEventReader.next()不能在编译时转换为XMLEvent?

为什么javax.xml.stream.XMLEventReader.next()不能在编译时转换为XMLEvent?,java,xml-parsing,Java,Xml Parsing,谁能解释一下为什么这段代码不能编译: import java.io.FileInputStream; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.events.XMLEvent; public class Test { public static void main(String[] args) throws Excep

谁能解释一下为什么这段代码不能编译:

import java.io.FileInputStream;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.XMLEvent;

public class Test {

    public static void main(String[] args) throws Exception {
        XMLEventReader xr = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("test.xml"));
        XMLEvent e = xr.next();
    }
}
输出

Test.java:10: error: incompatible types
        XMLEvent e = xr.next();
                            ^
  required: XMLEvent
  found:    Object
1 error
根据API XMLEventReader.next()返回XMLEvent


注意:我使用了JavaC1.7.0_03,接口
XMLEventReader
扩展了原始类型
Iterator
,而不是参数化类型
Iterator
,因此
next()
将返回
对象。您应该改为使用
nextEvent()
,它确实返回
XMLEvent

您可以将
对象
强制转换为
XMLEvent
——但实际上需要这样做,即编写强制转换表达式。在这里,您不是强制转换,只是试图进行非法赋值。因为您需要
nextEvent()
方法,
next()
来自迭代器,它是XMLEventReader的父类