弹出堆栈Java时未经检查的转换

时间:2010-10-09 22:44:38

标签: java stack compiler-warnings unchecked-conversion

我是Java的新手并且有关于警告的问题:

我的通用代码:

private Stack<ArrayList> stackFrame = new Stack<ArrayList>();
private ArrayList<Object> curBlocKList = new ArrayList<Object>();
...
curBlockList = stackFrame.pop();

我得到了:

Parser.java:78: warning: [unchecked] unchecked conversion
found   : java.util.ArrayList
required: java.util.ArrayList<java.lang.Object>
    curBlockList = stackFrame.pop();

我不知道如何在没有警告的情况下在语法上完成这项工作,因为我正在做家庭作业,编译和插入时不允许出错

@SurpressWarning("unchecked")

也不允许。

我需要做些什么才能摆脱这种警告?

另外,我希望curBlocKList保存对当前堆栈顶部的引用。这将由

完成
curBlockList = stackFrame.pop();

还是还有其他我需要做的事情?

2 个答案:

答案 0 :(得分:2)

@SurpressWarning("unchecked")应放在方法原型之前。

但你应该尝试改变

private Stack<ArrayList> stackFrame = new Stack<ArrayList>();

进入

private Stack<ArrayList<Object>> stackFrame = new Stack<ArrayList<Object>>();

答案 1 :(得分:1)

您需要在Stack的参数化中参数化ArrayList。另外,我建议使用List而不是ArrayList;你应该program to the interface, not the implementation

private Stack<List<?>> stackFrame = new Stack<List<?>>();
private List<?> curBlockList = new ArrayList<Object>();