2017-10-24 64 views
1

のようなプリミティブオブジェクトをソートできるようにするために、クラスSortableArray<T extends Comparable<T>>のオブジェクトで動作するソート関数の小さなパッケージを作成しています。クラスオブジェクト(この場合は具体的にはInteger)。そこで、コンストラクタをオーバーライドして、の配列を取り、それぞれIntegerにラップし、配列tempに格納してから、GenListtempを指すようにしました。私はIDEを幸せにするために(T[])のキャストを追加しましたが、現在はチェックされていないタイプの警告があります。ここでジェネリックアレイのプリミティブをラップする際にチェックされていないキャストに関する警告

は私のコードです:

package sorts; 

public class SortableArray<T extends Comparable<T>> { 
    T[] GenList; 


    public SortableArray(T[] theList) { 
     GenList = theList; 
    } 

    public SortableArray(int[] theList) { 
     Integer[] temp = new Integer[theList.length]; 
     for(int i = 0; i < theList.length; i++) { 
      temp[i] = new Integer(theList[i]); 
     } 
     GenList = (T[]) temp; //warning here 
    } 
} 

は、私はちょうど警告を抑制すべきか、より安全なアプローチがありますか?

ありがとうございました。

SortableArray<String> array = new SortableArray<>(new int[] { 3, 9, 9 }); 

それはばかげて見えるが、それは完全に法的だ、とあなたはどこか別の場所にそれを使用したいときにあなたをかむ:私はこのような何かをしようとした場合、これは問題となる可能性が

答えて

4

理由があります。あなたの代わりに検討する必要がありますどのような

はこのようになりますstaticファクトリメソッド、次のとおりです。

public static SortableArray<Integer> createSortableArrayFromInts(int[] theList) 
{ 
    Integer[] temp = new Integer[theList.length]; 
    for(int i = 0; i < theList.length; i++) { 
     temp[i] = Integer.valueOf(theList[i]); 
    } 
    return new SortableArray<Integer>(temp); 
} 
+1

私は本当に私は、コンストラクタでプリミティブをラップすることができソリューションを見て期待していたが、それは私のケーキを食べて食べることを意味するでしょう。あなたの答えは洞察力があり、私はそれを使用するつもりです! –

関連する問題