2011-05-01 8 views
0

내가 private E[] arrCirc; 을 내 생성자에서 내가 arrCirc = (E[]) new Object[capacity]; 을 가지고 있지만 나는 그것을 컴파일하려고 할 때이 경고를 얻을 : 발견Unchcked 캐스트 제네릭 내 코드에서

[선택 해제] 체크되지 않은 캐스트
을 : java.lang의 .Object
필수 : ​​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[] (오픈 JDK에서 generic collections을 가장처럼)의 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

+0

arrCirc를 Object [] 유형으로 만들었지 만 여전히 경고가 표시됩니다. 이 경우에 @ – user714003

+0

@ 사용자라면'(E [])'에 캐스팅 할 필요가 없습니다. –

0

자바 제네릭을 구현하는 유형 소거를 사용하므로 당신이 잠재적으로 안전하지 않은 캐스트의 경고를하는 이유 (E [])가, 그건 함께 무엇을 의미하는지 런타임에서 알 수 없습니다.

이 일에보세요 (음 ... 오라클) 문서 : http://download.oracle.com/javase/tutorial/java/generics/erasure.html

당신은 항상 경고가 멀리 갈 수 있도록 @SuppressWarnings(value = "unchecked")를 사용할 수 있습니다.