2017-05-11 2 views
-1

Sorry, wenn diese dumme Frage, aber ich habe die folgende Methode ...Wie eine generische Methode verwenden

static <V> V[] getRange(V[] arr, V val, int range) { 
    ArrayList<V> inRange = new ArrayList<>(); 
    int index = -1; 
    for (int i = 0; i < arr.length; i++) 
     if (arr[i] == val) 
      index = i; 
    for (int i = 0; i < arr.length; i++) 
     if (Math.abs(i - index) <= range) 
      inRange.add(arr[i]); 
    return (V[]) inRange.toArray(); 
} 

Mit dieser Methode, die Sie angeblich sind in der Lage sein, ein Element und einen Bereich zu liefern, und Gibt ein Array mit nahe gelegenen Werten zurück. Zum Beispiel im psuedocode was das passieren soll.

getRange({1,2,3,4,5,6}, 5, 2) = {3,4,5,6} 

Allerdings, wenn ich versuche, diese Methode mit einem int verwenden ich die folgende Meldung:

Verfahren getRange (V [], V, int) in der Art myType ist nicht anwendbar für die Argumente (int [], int, int)

+0

https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#instantiate –

+0

Urtyp wird implizit in Wrapper umgewandelt gegebenenfalls - jedoch kann das gleiche nicht für Arrays gesagt werden. Sie müssen ein Array vom Typ Integer verwenden. Integer [] Bereich = getRange (neue Ganzzahl [] {1,2,3,4,5,6}, 5, 2); Auch Ihre generische Methode hat derzeit einen ungültigen Rückgabetyp anstelle von V []. –

+0

Gibt es eine generische Methode zum Konvertieren von primitive [] in Wrapper []? –

Antwort

-1

Weil ein Primitiv nicht als generischer Wert verwendet werden kann. Versuchen Sie mit der Integer Klasse, sollte es in Ordnung sein.

+0

Ich denke, Sie wollten etwas anderes schreiben, als Sie geschrieben haben "Ein Primitiv kann kein Primitives sein". – user2357112

Verwandte Themen