我有以下代码:
// xpath evaluates to net.sf.saxon.xpath.XPathEvaluator
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expression = xpath.compile("/foo/bar");
Object evaluate = expression.evaluate(someXML, XPathConstants.NODE);
Object evaluate2 = expression.evaluate(someXML, XPathConstants.NODESET);
System.out.println(evaluate!=null?evaluate.getClass():"null");
System.out.println(evaluate2!=null?evaluate2.getClass():"null2");
System.out.println(evaluate instanceof Node);
System.out.println(evaluate2 instanceof NodeList);
Run Code Online (Sandbox Code Playgroud)
这就是结果......
class net.sf.saxon.tinytree.TinyElementImpl class java.util.ArrayList false false
只是为了澄清,如果我这样做:
org.w3c.dom.Node node = (org.w3c.dom.Node)evaluate;
Run Code Online (Sandbox Code Playgroud)
要么
org.w3c.dom.NodeList node = (org.w3c.dom.NodeList)evaluate2;
Run Code Online (Sandbox Code Playgroud)
我得到了 ClassCastException
怎么可能?根据Suns Java 1.5 API NODE和NODESET应分别映射到org.w3c.dom.Node和org.w3c.dom.NodeList
只是澄清2是的我知道Node是一个iterface,getClass()返回一个具体的类.