【问题标题】:Unsafe or unchecked expressions in an arraylist数组列表中的不安全或未经检查的表达式
【发布时间】:2015-05-14 19:56:52
【问题描述】:

我正在做一个作业,我必须创建一个可迭代的集合,以保存特定阈值之间的二叉树的所有值。二叉树类有一个根变量,它是我编写的 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 中收到了相同的消息,但这似乎暗示它并不重要。但是,我必须以某种方式解决这个问题。我尝试阅读不安全/未经检查的操作,但我不确定我是否真的理解这里的问题。 有什么办法可以在不更改整个代码的情况下解决这个问题?

【问题讨论】:

    标签: java arraylist binary-tree unsafe unchecked


    【解决方案1】:

    您使用的是raw type

    public ArrayList<Integer> listing(
            int low, int high, ArrayList list) {
    //                         ^^^^^^^^^
    

    这是不安全的,因为这让我可以通过任何类型的ArrayList

    root.listing(lo, hi, new ArrayList<String>(Arrays.asList("abc")));
    

    使用ArrayList&lt;Integer&gt; 而不是ArrayList

    【讨论】:

      【解决方案2】:

      这不是错误,而是警告,但是,正如您所指出的,您可能应该修复它。

      问题是你传递了一个未绑定的ArrayList,理论上它可以容纳任何类型的元素,而你只处理Integers。因此,您可以将参数声明为 ArrayListIntegers:

      public ArrayList<Integer> listing(int low, int high, ArrayList<Integer> list) {
      

      编辑:
      顺便说一句,方法的声明中不需要有 ArrayList。由于您在这里唯一关心的是List 接口而不是它的实现,因此您可以稍微清除一下声明:

      public List<Integer> listing(int low, int high, List<Integer> list) {
      

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 2014-07-06
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        • 2010-09-20
        • 2019-02-09
        • 1970-01-01
        相关资源
        最近更新 更多