0

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

[未选中] 未选中强制转换
: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;
  }
4

2 回答 2

1

你能做你arrCirc的类型吗(就像openJDK 中的Object[]大多数通用集合一样)?

(并且做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;
          } 
于 2011-05-01T03:46:05.870 回答
0

Java 使用类型擦除来实现泛型,因此它无法在运行时知道 (E[]) 的含义,这就是为什么您会收到潜在不安全强制转换的警告。

看看 Sun (erm...Oracle) 文档:http: //download.oracle.com/javase/tutorial/java/generics/erasure.html

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

于 2011-05-01T04:00:20.247 回答