我正在做一个分配,我必须创建一个估计的集合,以在某些tresholds之间保存所有二进制树的值。二进制树类具有根变量,这是我编写的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中收到了同样的信息,但这似乎意味着这并不重要。但是,我必须以某种方式解决此问题。我尝试阅读不安全/不受组织的操作,但我不确定我是否真的了解这里有什么问题。有什么方法可以解决此问题而不更改整个代码?
您使用的是原始类型:
public ArrayList<Integer> listing(
int low, int high, ArrayList list) {
// ^^^^^^^^^
这是不安全的,因为这让我通过任何类型的ArrayList
:
root.listing(lo, hi, new ArrayList<String>(Arrays.asList("abc")));
使用ArrayList<Integer>
代替ArrayList
。
这不是错误,这是一个警告,但是,正如您指出的那样,您可能应该修复它。
问题在于,您正在传递未结合的ArrayList
,从理论上讲,您只能在处理Integer
s时容纳任何类型的元素。因此,相反,您可以将您的参数声明为Integer
S的ArrayList
:
public ArrayList<Integer> listing(int low, int high, ArrayList<Integer> list) {
编辑:
顺便说一句,无需在该方法的声明中拥有 array 列表。由于您唯一关心的是List
接口,而不是其实现,因此您可以稍微清除声明:
public List<Integer> listing(int low, int high, List<Integer> list) {