Java:Stack.pop()+不兼容的类型

时间:2013-01-20 13:29:22

标签: java stack incompatibletypeerror

这是我第一次使用Stack-structure。这是基本的想法:我正在写一个基于文本的冒险,玩家可以访问不同的房间。目前他不能回去。我想我可能会用Stack来记录他的动作。因此,如果他进入另一个房间,我使用push()将currentCity(这是City类的一个Object)放到Stack上。它看起来像是:

private Stack history;

在构造函数中:

history = new Stack();

在“go”函数中:

history.push(currentCity)

如果我尝试在goBack函数中检索Object,就像这样:

currentCity = history.pop();
(currentCity is a private variable of the class I'm working in. It's of the type
City)

我认为这样可行,因为我的Stack上面的对象来自City类型,因此是变量currentCity。我仍然得到不兼容的类型。

任何帮助将不胜感激, stiller_leser

4 个答案:

答案 0 :(得分:1)

您将需要强制转换或显式定义堆栈的泛型参数。我建议指定通用参数。

private Stack<City> history;

history.push(city);
currentCity = history.pop();

答案 1 :(得分:0)

您没有提供足够的信息以获得良好的帮助。你没有显示所有内容的声明,你没有给出错误信息的确切文本,而且这种情况下,一个小的自包含的例子对你来说非常容易和有启发性。

pop()几乎肯定会返回Object,在这种情况下,您必须将其强制转换为City来克服错误。但我不得不在这里猜几件事......

答案 2 :(得分:0)

该方法声明为Object pop(),因此编译器只会看到Object,这与City不兼容。如果您使用了Stack<City>,那么您将拥有方法City pop(),它可以正常运行。

BTW Stack是一个过时的类,预收集框架。最好使用LinkedList removeLastpop,{{1}}。

答案 3 :(得分:0)

您正在使用原始(untyoed)堆栈。使用类型化堆栈:

private Stack<City> history;

history = new Stack<City>();

然后

currentCity = history.pop();

将编译。