0

私のコードと private E[] arrCirc; コンストラクターにはあります arrCirc = (E[]) new Object[capacity]; が、コンパイルしようとすると警告が表示されます。

[未チェック] 未チェックのキャスト
が見つかりました: 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;
  }
4

2 に答える 2

1

あなたarrCircのタイプを作ることはできますかObject[](openJDKのほとんどの一般的なコレクションのように)?

(そしてする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 は Type Erasure を使用してジェネリックを実装するため、実行時に (E[]) の意味を認識できません。そのため、潜在的に安全でないキャストの警告が表示されます。

Sun (erm... Oracle) のドキュメントを参照してください: http://download.oracle.com/javase/tutorial/java/generics/erasure.html

@SuppressWarnings(value = "unchecked")警告を消すためにいつでも使用できます。

于 2011-05-01T04:00:20.247 に答える