2013-05-01 32 views
-1

将类型为Node的对象强制转换为DatanodeDescriptor时,我得到了ClassCastException。 当我在调试器中检查对象时,它是DatanodeDescriptor类型并包含有效数据。可能是什么问题呢?将对象强制转换为自己的类型时发生ClassCastException

Node n = null; 
... 
... 
n = innerNode.getLeaf(index, null); 
DatanodeDescriptor d = (DatanodeDescriptor)n; 

编辑:我添加了一行检查

if (n instanceof DatanodeDescriptor)System.out.println("It is") 

,并成功地打印它给了异常

+1

你做一个'如果(N的instanceof DatanodeDescriptor)',并检查结果如何? – NINCOMPOOP 2013-05-01 17:39:07

+1

什么是详细信息,例如'{someType}不能转换为DatanodeDescriptor'? – gparyani 2013-05-01 17:40:13

+0

java.lang.ClassCastException:org.apache.hadoop.net.NetworkTopology $ InnerNode无法转换为org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor – 2013-05-01 17:48:10

回答

1

要么innerNode.getLeaf不返回DatanodeDescriptor或节点之前不实际上是一个DatanodeDescriptor。

0

该类的名称已完全由包确定。你确定DatanodeDescriptor实际上是相同的类吗?您可以考虑使用该接口来输入类名称的扩展名。

到illjustrate它即

my.node.Node; 
other.node.Node; 

Node nd = (Node)other; 
+2

类加载器怎么样?投射到从不同类加载器加载的类(即使它是相同的类)将导致java.lang.ClassCastException。 – gparyani 2013-05-01 17:42:27

+0

好的说法。 :) – Devolus 2013-05-01 18:10:42

相关问题