我正在做一项任务,我必须创建一个可迭代的集合,在某些阈值之间保存二叉树的所有值。二叉树类有一个根变量,它是我编写的TreeNode类的一个对象。节点仅存储整数值。以下是我的方法:
public class Tree {
public Iterable<Integer> listing(int low, int high) {
ArrayList<Integer> list=new ArrayList<Integer>();
return root.listing(lo, hi, list);
}
}
public class TreeNode {
public ArrayList<Integer> listing(int low, int high, ArrayList list) {
if(this.left!=null) {
list=this.left.listing(low, high, list);
}
if(this.value>=low && this.value<=high) {
list.add(this.value);
}
if(this.right!=null) {
list=this.right.listing(low, high, list);
}
return list;
}
}
它在本地工作得很好,但是我必须将它上传到使用Java 6的平台,并且我收到一个错误,它使用了未经检查或不安全的操作。 我在IDE中得到了同样的信息,但似乎暗示它并不重要。但是,我必须以某种方式解决这个问题。我试着阅读不安全/未经检查的操作,但我不确定我是否真的明白这里的问题是什么。 有没有办法解决这个问题而不改变整个代码?
答案 0 :(得分:2)
您正在使用raw type:
public ArrayList<Integer> listing(
int low, int high, ArrayList list) {
// ^^^^^^^^^
它不安全,因为这让我可以传递任何类型的ArrayList
:
root.listing(lo, hi, new ArrayList<String>(Arrays.asList("abc")));
使用ArrayList<Integer>
代替ArrayList
。
答案 1 :(得分:1)
这不是错误,这是一个警告,但正如您所说,您应该修复它。
问题在于你传递的是未绑定的ArrayList
,理论上,它可以容纳任何类型的元素,而你只处理Integer
s。因此,您可以将参数声明为ArrayList
的{{1}}:
Integer
编辑:
顺便说一句,方法声明中不需要数组列表。因为你唯一关心的是public ArrayList<Integer> listing(int low, int high, ArrayList<Integer> list) {
接口而不是它的实现,你可以稍微清理一下声明:
List