2011-06-30 6 views
0

のパラメータから配列を作成します。は、私は配列で、配列のリストを実装しているJavaの

public class ArrayIndexList<E> { 
    private E[] A; 
    private int capacity = 5; // Initial Array Size 
    private int size = 0; 

    public ArrayIndexList() { 
     A = (E[]) new Object[capacity]; 
    } 

    public void add(int index, E element) { 
     /* if array is full: 
     * 1. double the array size 
     * 2. copy elements to the new array */ 
     if (size == capacity) { 
      capacity = capacity * 2; 
      E[] B = (E[]) new Object[capacity]; 
      for (int i = 0;i < size;i++) 
      B[i] = A[i]; 
      A = B; 
     } 

     // shift the elements up 
     for (int i = size - 1;i >= index;i--) 
      A[i + 1] = A[i]; 

     // add new element 
     A[index] = element; 
     size = size + 1; 
    } 

    public E remove(int index) { 
     E temp = A[index]; 

     //shift elements down 
     for (int i = index;i < size - 1;i++) 
      A[i] = A[i + 1]; 
     size = size - 1; 

     return temp; 
    } 
} 

それは働いているが、コンパイラは警告与える:

Type safety: Unchecked cast from Object[] to E[] ArrayIndexList.java 

コードと間違って何を?

答えて

4

実行時にキャストをチェックできないため、警告が表示されます。最新のコンパイラ を使用すると、@SuppressWarnings("unchecked")を使用して警告を抑制することができます。

それが役に立ちましたか?

http://mindprod.com/jgloss/compileerrormessages.html#TYPESAFETYERASED

+0

問題を完全に解決する方法はありますか? –

1

あなたはObject[]からE[]にキャストするときのアレイは、実行時にそのコンポーネントタイプを保持するので、あなたは実際に一種の、嘘をついているので、より具体的な配列型にObject[]からキャストして、現実には不可能です。型パラメータEのスコープ内にあるため、エラーが発生しないようにE[]が消去されます。

変数 "A"のタイプがObject[]である唯一の代替方法があるため、実際にはこれが可能ですが、何かを取得するたびにEにキャストする必要があります。より多くのチェックされていないキャスト警告が生成されます。あなたがそれから出る方法はないので、あなたはそれらを抑圧する必要があります。 (あなたのクラスが何をしているかを決める前に作られた型をラップしない限り、それ自体は同じことをし、これらの警告を内部的に抑制する必要があります)

関連する問題