繁体   English   中英

ArrayList错误,未经检查和不安全的操作

[英]ArrayList error , unchecked and unsafe operation

该代码不会为我编译,任何人都可以修复它或看到问题吗? 我不断收到错误arraylistv2.java uses unchecked or unsafe operators ,当我添加-Xlint时,它指向

private T[] seq = (T[])(new Object[1024]); // 1024 arbitrary

作为问题,有什么想法吗?

    class ArrayList<T>
      {
        private T[] seq = (T[])(new Object[1024]); // 1024 arbitrary
        private int numItems = 0; // seq[0..numItems-1] significant

        public int size() { return(numItems); }

        public T get(int i)
        {
        if(i < 0 || i >= numItems)
            throw new IndexOutOfBoundsException();
        else
            return seq[i];
        }

        public T set(int i, T t)
        {
            if(i < 0 || i >= numItems)
                throw new IndexOutOfBoundsException();
            else
            {
                T temp = seq[i];
                seq[i] = t;
                return temp;
            }
        }

        public boolean add(T t)
        {
            add(numItems,t);
            return true; // for compatibility reasons only
        }

        public void add(int i, T t)
        {
        if(i < 0 || i > numItems)
            throw new IndexOutOfBoundsException();
        if(numItems == seq.length)
            resize(); // extend seq
        for(int k = numItems; k > i; k--) // shift seq[i..] to right
            seq[k] = seq[k-1];
        seq[i] = t;
        numItems++;
    }

    private void resize()
    { // seq is full -- double its size
    T[] temp = (T[])(new Object[seq.length * 2]); // bigger array
    for (int i = 0; i < seq.length; i++) // copy over items
        temp[i] = seq[i];
    seq = temp; 
    }
}

public class arraylistv2{
    public static void main(String [] args){

        ArrayList<String> arraylist1 = new ArrayList<String>();
        arraylist1.add(1,"orange");
        arraylist1.add(2,"apple");

        int i = arraylist1.size();
        System.out.println(arraylist1);

    }


}

消息"arraylistv2.java uses unchecked or unsafe operators"是警告而不是错误。 换句话说,您的代码中没有编译时错误。 因此,它应该可以正常编译(尽管有一些警告消息)。

您的代码中实际上存在运行时错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException
  at arraylistv2$ArrayList.add(arraylistv2.java:45)
  at arraylistv2.main(arraylistv2.java:5)

最后,在这里的代码中似乎不需要从object[]T[]的类型:

private T[] seq = (T[])(new Object[1024]);

我建议将其保留为Object[] 自定义ArrayList类的所有方法均与通用类型T一起使用,因此无论如何都无法将任何其他类型的对象放入seq 这是我前一段时间编写的自定义ArrayList类的示例: https : //github.com/anshulverma/nuaavee-collections/blob/master/src/main/java/com/nuaavee/collections/list/ArrayList.java

希望能有所帮助。

PS我还应该指出,通常要问一些具体问题,而不是粘贴完整的代码清单。 您将有更多的人以这种方式回答您的问题。 并不是每个人都有像我这样的空闲时间;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM