我正在尝试在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
有人可以告诉我如何进行适当的类型转换。或者我的方法是错误的,我应该做其他事情吗?
我是数据结构的新手。所以,任何帮助将不胜感激。 非常感谢你提前。
答案 0 :(得分:3)
在所有情况下,您都不能随意将对象强制转换为其他类型。考虑为Position
编写一个构造函数,它将用户提供的字符串值作为参数。
答案 1 :(得分:2)
正如错误所示,您试图说String
是Position
,而不是Position
。相反,您需要从String
:
String s = br.readLine();
Position p = new DNode(s);
String
你必须实现如何在DNode
类的构造函数中将DNode
转换为{{1}}对象的逻辑