2011-05-01 42 views
0

在我的代码有 private E[] arrCirc; ,在我的构造函数我有arrCirc = (E[]) new Object[capacity]; 但是当我尝试编译它,我得到一个警告:Unchcked演员泛型

[选中]选中投
发现:java.lang中.Object
required:E []

错误,我不知道为什么。

public class Array12<E> implements LimCapList<E>{ 

    private int size = 0; 
    private int capacity = 0; 
    private int front; 
    private int back; 
    private E[] arrCirc; 

    public Array12(int capacity){ 
    if(capacity <= 0) 
     throw new IllegalArgumentException(); 
    arrCirc = (E[]) new Object[capacity]; 
    front = 0; 
    back = 1; 
    } 

回答

1

可以让你的Object[]型(最喜欢的generic collections在OpenJDK的做)的arrCirc

(做arrCirc = new Object[capacity];

否则为警告,您可以只使用SupressWarning。

 @SuppressWarnings("unchecked") 
     public Array12(int capacity){ 
      if(capacity <= 0) 
       throw new IllegalArgumentException(); 
      arrCirc = (E[]) new Object[capacity]; 
      front = 0; 
      back = 1; 
      } 
+0

我的任务说我应该只有一个int类型的参数构造函数。否则,我可以使用这个。 – user714003 2011-05-01 03:47:46

+0

我把我的arrCirc变成了一个Object []类型,但我仍然收到警告。 – user714003 2011-05-01 04:02:55

+0

@user在这种情况下,你不需要投射'(E [])'。 – 2011-05-01 04:04:01

0

Java使用类型擦除来实现泛型,因此它不能在运行时知道你的意思(E []),这就是为什么你得到一个潜在的不安全投的警告内容。

在太阳看一看(呃... Oracle)的文档:http://download.oracle.com/javase/tutorial/java/generics/erasure.html

您可以随时使用@SuppressWarnings(value = "unchecked")使警告消失。