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]);
}

996600cookie-checkinkompatible Typen: Die Inferenzvariable T hat inkompatible Grenzen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy