此代码不会为我编译,任何人都可以修复它或看到它的问题?
我一直收到错误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);
}
}
答案 0 :(得分:0)
消息"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
希望有所帮助。
P.S。我还应该指出,通常更好地提出具体问题而不是粘贴完整的代码清单。您将有更多人以这种方式回答您的问题。不像每个人都有很多空闲时间;)