这是我第一次使用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
答案 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
removeLast
,pop
,{{1}}。
答案 3 :(得分:0)
您正在使用原始(untyoed)堆栈。使用类型化堆栈:
private Stack<City> history;
history = new Stack<City>();
然后
currentCity = history.pop();
将编译。