ArrayList von ArrayList

krgewb

Top Contributor
Code:
ArrayList<ArrayList<Integer>> a = new ArrayList<>();
a.add((ArrayList<Integer>) Arrays.asList(1, 2, 3));

Fehlermeldung:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
 
Die Exception besagt doch schon alles:
Das eine ist die innere Klasse in Arrays: java.util.Arrays$ArrayList.
Das andere ist die Klasse java.util.ArrayList
Und daher schlägt der cast fehl.

Implementiere wo möglich gegen ein Interface und nicht gegen eine konkrete Klasse. Also mach eine List<List<Integer>> wenn es unbedingt sein muss. Bei der Erstellung einer Instanz bleibt dann natürlich noch ein new ArrayList<>().

Aber aus objektorientierter Sicht stellen sich mir da oft die Nackenhaare auf. Was ist das innere List<Integer>? Ich würde mich wundern, wenn sich da nicht eine eigene Klasse anbieten würde ...Aber mit so einem kleinen Ausschnitt ist das natürlich nicht wirklich zu sagen.
 
Arrays.asList gibt nicht die typische ArrayList zurück, daher schlägt der Cast fehl.
Nutz einfach das Interface List, statt der konkreten Implementierungen.


Ganz generell würde ich solche Konstrukte auch vermeiden – besser ist da ein eigener Wrapper um die Listen, dann kann man domänenspezifische Operationen anbieten und hat’s durch passende Namen auch gleich verständlicher.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben