列表实现中的ClassCastException?

时间:2012-05-09 19:52:13

标签: java list adt classcastexception

我正在尝试在Java中实现一个ADT列表。我跟着Goodrich的一本关于Data Structures的书。

我创建了2个名为Position的接口:

public interface Position {
    Object element()throws InvalidPositionException;

}

和列表,其中包含first(), last()等列表的方法声明

现在,我有一个名为DNode.java的类,它实现了Position,并且具有为特定节点分配上一个和下一个元素的方法。

最后,我有NodeList.java,它实现了List接口。

在这里,有一个insertBefore()方法,它将Position和Object作为输入,并对列表进行更改以在特定位置之前插入节点。

现在,从ListMain类调用此方法,该类是主类。

    Object p = (Object) br.readLine();
    nl.insertAfter((Position)p, element);
    nl.display();

基本上,我以字符串的形式从用户那里获取输入,将其转换为Object类型,然后将其转换为Position类型。 当我这样做时,我得到一个类演员异常,说

  

java.lang.String无法强制转换为ListPackage.Position

有人可以告诉我如何进行适当的类型转换。或者我的方法是错误的,我应该做其他事情吗?

我是数据结构的新手。所以,任何帮助将不胜感激。 非常感谢你提前。

2 个答案:

答案 0 :(得分:3)

在所有情况下,您都不能随意将对象强制转换为其他类型。考虑为Position编写一个构造函数,它将用户提供的字符串值作为参数。

答案 1 :(得分:2)

正如错误所示,您试图说StringPosition,而不是Position。相反,您需要从String

创建String s = br.readLine(); Position p = new DNode(s);
String

你必须实现如何在DNode类的构造函数中将DNode转换为{{1}}对象的逻辑