阵列列表中的不安全或不受欢迎的表达式



我正在做一个分配,我必须创建一个估计的集合,以在某些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) {

最新更新