2017-10-24 7 views
1

Ich schreibe ein kleines Paket von Sortierfunktionen, die an einem Objekt der Klasse SortableArray<T extends Comparable<T>> arbeiten, weil ich primitive Objekte wie int sortieren kann, muss ich die Grundelemente in umbrechen ein Klassenobjekt, in diesem Fall speziell Integer. Also überlastete ich meinen Konstruktor, um ein Array vom Typ int zu nehmen, wickeln Sie jedes in eine Integer, speichern Sie es in einem Array, temp, und zeigen Sie dann GenList auf temp. Ich habe eine Besetzung von (T[]) hinzugefügt, um die IDE glücklich zu machen, aber jetzt habe ich eine unkontrollierte Art Warnung.Ungeprüfte Cast-Warnung beim Umbrechen von Primitiven für generisches Array

Hier ist mein Code:

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 
    } 
} 

Soll ich die Warnung nur unterdrücken, oder gibt es einen sicheren Ansatz?

Vielen Dank für Ihre Antworten.

Antwort

4

Der Grund dies problematisch sein könnte, ist, wenn ich so etwas zu tun versucht:

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

Es ist lächerlich aussieht, aber es ist völlig legal und wird dich beißen, wenn Sie es irgendwo anders verwendet werden soll.

Was Sie stattdessen ist eine statische Factory-Methode betrachten möchten, die wie folgt aussehen könnte:

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

ich wirklich hatte gehofft, eine Lösung zu finden, die mir die primitive im Konstruktor zu wickeln erlaubt, aber das würde bedeuten, meinen Kuchen zu bekommen und ihn auch zu essen. Ihre Antwort war aufschlussreich und ich werde sie nutzen! –

Verwandte Themen