java.lang.UnsupportedOperationException

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Code:
String[] test = {"1", "2"};
List list = Arrays.asList(test);
list.add("3");

--> java.lang.UnsupportedOperationException

Warum geht das nicht? Andere Lösung

Brauch halt ne Liste wegen der komfortablen contains-Methode. 😉
 
Arrays#asList erzeugt eine Liste, deren Größe nachträglich nicht verändert werden kann.

So sollte es gehen:
Code:
String[] test = {"1", "2"};
List list = new ArrayList(test.length);
for ( int i=0; i<test.length; i++) list.add( test[i]); //--- JDK >= 1.5 auch: for (String str : test) list.add( str);
list.add("3");
 
Schau in die API-Doc
API-Doc zu asList hat gesagt.:
This method also provides a convenient way to create a fixed-size list initialized to contain several elements

Du mußt eine andere Datenstruktur (ArrayList, LinkedList) nehmen, die diese fixed-sized-List in ihrem
Konstruktor übergeben bekommt.

Ob eine änderbare Liste direkt erzeugt werden kann, weiß ich nicht.

Edit: Daß eine fixed-sized-List erzeugt wird, liegt vor allem daran, daß die Liste mit dem
Array in eine Richtung verschränkt wird, also Änderungen an der Liste auch das
Array verändern. Beispiel:

Code:
import java.util.*;

class A {
	public static void main(String[] args) {
		String[] test = {"1", "2"};
		List list = Arrays.asList(test);
		list.set(1, "42");
		for (String t : test)
			System.out.println(t);
	}
}
liefert
Code:
1
42

(Das wußte ich seit ein paar Minuten allerdings auch nicht :shock: )
 
tja, hier wird halt gespart, keine ganz neue Liste erzeugt und alle Elemente kopiert sondern nur ein 'kleiner' Wrapper gebastelt, der auf dem vorhandenen Array weiterarbeitet,

in das vorhandene Array kann daher nix neues eingefüt werden,

wenn du dagegen list.set(0,"3"); machst, dann wird das vorhandene Array test geändert,

insofern steht hier also wirklich das Array im Mittelpunkt,

------
falls du eine ganz neue Liste haben willst wirst du wohl um die Zeilen
new ArrayList + Schleife mit add
nicht drumherumkommen,

oder ist doch dafür irgendwo eine Operation versteckt? brauche ich auch manchmal 😉
 
Hehe! So ganz durchdacht ist das Konzept aber auch nicht 😎
Code:
	int[] test = {1,2};
	List list = Arrays.asList(test);
	list.set(0, 42);
liefert zur Laufzeit eine ArrayStoreException, da die 42 nicht autoungeboxed wird.

Ein kleiner Boolean in einer der gelieferten Klasse, der weiß ob das
Originalarray aus primitiven Daten oder bereits Wrappern bestand,
würde da doch schon reichen. ???:L
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben