0

我正在尝试在 Java 中实现一个列表 ADT。我遵循了 Goodrich 的一本关于数据结构的书。

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

public interface Position {
    Object element()throws InvalidPositionException;

}

和 List ,它具有列表等的方法声明first(), last()

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

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

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

现在,这个方法是从作为主类的 ListMain 类中调用的。

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

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

java.lang.String 不能转换为 ListPackage.Position

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

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

4

2 回答 2

3

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

于 2012-05-09T19:56:14.003 回答
2

正如错误所说,您试图说 aString是 a Position,但事实并非如此。相反,您需要Position从以下创建一个String

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

您将必须在类的构造函数中实现如何将 aString转换为DNode对象的逻辑DNode

于 2012-05-09T19:58:25.047 回答