make arrayList.toArray () gibt spezifischere Typen zurück

Also würde ArrayList.toArray() normalerweise einen Typ von Object[] … zurückgeben. Aber angenommen, es handelt sich um eine Arraylist des Objekts Custom , wie mache ich toArray() , um einen Typ von Custom[] anstelle von Object[] ?

So was:

 List list = new ArrayList(); String[] a = list.toArray(new String[0]); 

Vor Java6 wurde empfohlen zu schreiben:

 String[] a = list.toArray(new String[list.size()]); 

weil die interne Implementierung sowieso ein Array mit richtiger Größe neu zuweisen würde, also war es besser, es im Voraus zu tun. Seit Java6 wird das leere Array bevorzugt, siehe .toArray (new MyClass [0]) oder .toArray (new MyClass [myList.size ()])?

Wenn Ihre Liste nicht korrekt eingegeben wurde, müssen Sie vor dem Aufruf von Array eine Umwandlung durchführen. So was:

  List l = new ArrayList(); String[] a = ((List)l).toArray(new String[l.size()]); 

Es muss nicht wirklich Object[] , zum Beispiel: –

  List list = new ArrayList(); list.add(new Custom(1)); list.add(new Custom(2)); Custom[] customs = new Custom[list.size()]; list.toArray(customs); for (Custom custom : customs) { System.out.println(custom); } 

Hier ist meine Custom class: –

 public class Custom { private int i; public Custom(int i) { this.i = i; } @Override public String toString() { return String.valueOf(i); } } 

Ich habe die Antwort bekommen … das scheint perfekt zu funktionieren

 public int[] test ( int[]b ) { ArrayList l = new ArrayList(); Object[] returnArrayObject = l.toArray(); int returnArray[] = new int[returnArrayObject.length]; for (int i = 0; i < returnArrayObject.length; i++){ returnArray[i] = (Integer) returnArrayObject[i]; } return returnArray; } 
 @SuppressWarnings("unchecked") public static  E[] arrayListToArray(ArrayList list) { int s; if(list == null || (s = list.size())<1) return null; E[] temp; E typeHelper = list.get(0); try { Object o = Array.newInstance(typeHelper.getClass(), s); temp = (E[]) o; for (int i = 0; i < list.size(); i++) Array.set(temp, i, list.get(i)); } catch (Exception e) {return null;} return temp; } 

Proben:

 String[] s = arrayListToArray(stringList); Long[] l = arrayListToArray(longList);