inkompatible Typen: Die Inferenzvariable T hat inkompatible Grenzen [duplicate]
Lesezeit: 2 Minuten
Ich habe das folgende Stück Code
public int solution(int X, int[] A) {
List<Integer> list = Arrays.asList(A);
Aus irgendeinem Grund wird der folgende Kompilierungsfehler ausgegeben
Solution.java:11: Fehler: inkompatible Typen: Inferenzvariable T hat inkompatible Grenzen List list = Arrays.asList(A); ^ Gleichheitsbedingungen: Integer-Untergrenzen: int[] wobei T eine Typvariable ist: T erweitert das in der Methode asList(T…) deklarierte Objekt
Ich gehe davon aus, dass dies eine Java 8-Funktion ist, bin mir aber nicht sicher, wie ich den Fehler beheben soll
Verwenden Integer[] anstatt int[].
– sp00m
17. Dezember 2014 um 9:56 Uhr
Arrays.asList erwartet eine variable Anzahl von Object. int ist kein Objectaber int[] Somit Arrays.asList(A) wird eine erstellen List<int[]> mit nur einem Element.
Sie können verwenden IntStream.of(A).boxed().collect(Collectors.toList());
Beachten Sie, dass der IntStream-Ansatz eine etwas andere Semantik hat als die Verwendung von asList; Änderungen am zugrunde liegenden Array werden nicht in der resultierenden Liste widergespiegelt. (es gibt also eine Art Kopie). asList(T…) kopiert nicht. Da kenne ich leider keine Möglichkeit.
– rcreswick
12. Mai 2016 um 14:55 Uhr
@rcreswick Interessant, wusste ich nicht. Aber, wenn dieses Verhalten erwartet wird, dann gibt es wahrscheinlich wirklich keine Möglichkeit, es mit einem zu erreichen int[]als die int[] konnte nicht das unterstützende Array des Ergebnisses sein List<Integer>.
– tobias_k
12. Mai 2016 um 14:59 Uhr
Ich habe versucht, einen Weg zu finden, dies zu erreichen, und ich denke, der einzige Weg besteht darin, einen neuen Listentyp zu erstellen, der die Zugriffe verwaltet, um ein Sicherungsarray wiederzuverwenden, was wahrscheinlich die allgemeinen Leistungsverbesserungen vermeiden würde, auf die Sie hoffen, indem Sie a verwenden Backing-Array.
– rcreswick
14. Mai 2016 um 3:33 Uhr
In Java 8 können Sie tun
List<Integer> list = IntStream.of(a).boxed().collect(Collectors.toList());
Es gibt keine Abkürzung zum Konvertieren von int[] to List as Arrays.asList befasst sich nicht mit dem Boxen und erstellt nur eine Liste, die nicht das ist, was Sie wollen. Sie müssen eine Utility-Methode erstellen.
int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>();
for (int index = 0; index < ints.length; index++)
{
intList.add(ints[index]);
}
9966000cookie-checkinkompatible Typen: Die Inferenzvariable T hat inkompatible Grenzen [duplicate]yes
Verwenden
Integer[]
anstattint[]
.– sp00m
17. Dezember 2014 um 9:56 Uhr