Java arraylist-Konstruktor nicht finden kann, mit arrays.aslist
Ich bin mit den Arrays.asList().contains () - Methode in meinem code, wie gezeigt in der oberen Antwort: Wie kann ich testen, ob ein array enthält einen bestimmten Wert?, so werde ich die Verwendung von Arrays.asList() im code.
Jedoch der compiler lehnt dies folgenden code. Ist es, weil der primitive mit für meine Primzahlen array, sondern als eine Referenz geben? Ich glaube nicht, wegen autoboxing, aber ich wollte nur zu überprüfen.
import java.math.*;
import java.util.ArrayList;
import java.util.Arrays;
public class .... {
public static void main(String[] args) {
int[] primes = formPrimes(15);
ArrayList<Integer> primes1 = new ArrayList<Integer>(Arrays.asList(primes));
//Rest of code...
}
public static int[] formPrimes(int n) {
//Code that returns an array of integers
}
}
Bekomme ich einen Fehler, kann nicht finden das symbol Fehler.
symbol : Konstruktor ArrayList(java.util.Liste)
location: class java.util.ArrayList
ArrayList primes1 = new ArrayList(Arrays.asList(primes));
Grundsätzlich, ich habe eine Funktion die Rückgabe eines Arrays von ganzen zahlen, und ich will wandeln es in eine array-Liste, und ich bin in Schwierigkeiten mit der Verwendung der ArrayList-Konstruktor.
- Eigentlich bin ich dachte, es kann sein, weil Arrays.asList liefert eine Liste, nicht um eine array-Liste. Würde es das sein?
- Nein, das würde nicht es sein--sowohl eine ArrayList und eine Liste gibt es eine Auflistung, was die ArrayList ctor erwartet. Es ist, weil Sie mischen Arten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Autoboxing gilt nicht für arrays, nur um Grundtypen.
Den Fehler bekomme ich in eclipse ist
The constructor ArrayList<Integer>(List<int[]>) is undefined
Thats, da der Konstruktor in der ArrayList ist definiert als
public ArrayList(Collection<? extends E> c)
. Wie Sie sehen können, es akzeptiert nur ein Subtyp von Collection, die int nicht.Nur den code ändern zu:
und alles sollte gut werden, vorausgesetzt, Sie return ein Integer-array aus
fromPrimes
.Update
Von Andrew ' s Kommentare, und nach spähen in die Quelle des Arrays.asList:
So was wirklich hier passiert ist, dass
Arrays.asList(new int[] {})
wäre eigentlich eine RückkehrList<int[]>
im Gegensatz zuArrays.asList(new Integer[] {})
was wieder einList<Integer>
. Offensichtlich ist die ArrayList-Konstruktor wird nicht akzeptieren, eineList<int[]>
, und damit der compiler meckert.primes
ist ein array von primitivenint
Art; diese Art nicht abzuleiten ausObject
können und daher automatisch in eineList
(die, wie alleCollections
, nur halten kannObject
s). @Justin ist richtig; Sie müssen manuell hinzufügen die Elemente aus dem array in die Liste auf.Wenn Sie dies tun, erhalten Sie Zugriff auf die enthält
Methode können Sie auch Ihr eigenes schreiben.