# Array mit Listen



## Guest (2. Aug 2006)

Hi,

ich versuche grade eine Array zu deffinieren, der 13 Listen (oder ArrayLists) enthält. Bin aber am verzweifeln!
Hab folgendes versucht:

```
static public ArrayList<String>[] data_einz = new ArrayList[13];
```
Wenn ich dann versucht auf einer der ArrayLists zuzugreifen gibt er aber ne NullPointerException.

Was ist falsch?


----------



## Kola (2. Aug 2006)

Mit deinem Code reservierst du nur Speicher für das Array (und die Elemente werden mit null initialisiert). 

```
for(int i=0;i<data_ein.length;i++)
{
data_einz[i] = new ArrayList<String>();
}
```

So hast du dann auch Objekte im Array


----------



## Guest (2. Aug 2006)

Insgesamt müsste das also dann so aussehen:?

```
static public ArrayList<String>[] data_einz = new ArrayList<String>[13];
	for(int i=0; i<13; i++)
		data_einz[i] = new ArrayList<String>;
```
Fehler zur Zeile 1: Cannot create a generic array of ArrayList<String> und ein Syntax Error
Fehler bei der Schleife: Syntax error on token(s), misplaced construct(s)

Ich verstehs net°!!!!


----------



## SlaterB (2. Aug 2006)

wieso schreibst du 

```
for(int i=0; i<13; i++) 
      data_einz[i] = new ArrayList<String>;
```
wenn der korrekte Code 

```
for(int i=0;i<data_ein.length;i++)  { 
data_einz[i] = new ArrayList<String>(); 
}
```
bereits gepostet wurde? 

ob data_ein.length oder 13 ist weniger relevant, data_ein.length ist aber besser, das musst du zugeben,

das Weglassen der Klammern ist ein ganz kritische Fehler-Quelle,
das solltest du dir auch bei simpelsten Code-Beispielen nicht angewöhnen.. 
(in diesem Fall nicht die Fehlerursache),

und warum nun die Fehlermeldung auftritt verrate ich nicht wenn du einfach nur deine zwei Zeilen mit den gegebenen korrekten drei Zeilen vegleichen musst 

--------

public ArrayList<String>[] data_einz = new ArrayList<String>[13];

geht ganz einfach in Java nicht,
da musst du dich mit

public ArrayList<String>[] data_einz = new ArrayList<String>[13];


begnügen, was bis auf eine eventuelle Compiler-Warnmeldung das gleiche tut

edit:
upps: public ArrayList<String>[] data_einz = new ArrayList[13];


----------



## Guest (2. Aug 2006)

Ich glaub ich bin eifach zu blöd!
Ok, den einen Fehler hab ich endlich (ich hatte die Schleicfe versehentlich außerhalb aller Funktionen - also im Classen-Rumpf)
Aber bei Initialisierung harkt es immer noch!!!
Folgendes Hab ich direkt zu Beginn der Klasse:

```
static public ArrayList<String>[] data_einz;
```
Und dann am Anfang meiner Main-Fkt:

```
data_einz = new ArrayList<String>[13];
```
Hier entspteht folgender Fehler:


> Cannot create a generic array of ArrayList<String>


(Der gleiche Fehler tritt auf, wenn ich die UInitialisierung direkt hinter die Deffinition mache)

Ich hoffe der Fehler ist nicht zu einfach!


----------



## Murray (2. Aug 2006)

Anonymous hat gesagt.:
			
		

> Ich hoffe der Fehler ist nicht zu einfach!



Wie man's nimmt - eigentlich ist es wirklich recht einfach: wie die Fehlermeldung - und auch Slaters Post - besagt, kann man in Java schlichtweg keine generischen Arrays anlegen.

Also lebst Du entweder mit einem nicht-typsicheren Array:

```
ArrayList[] data_einz = new ArrayList();
```
, oder Du stellst von Array auf eine Collection um:

```
ArrayList<ArrayList<String>> data_einz = new ArrayList<ArrayList<String>>();
for ( int i=0; i<13; i++) data_einz.add( new ArrayList<String>());
```


----------



## Leroy42 (2. Aug 2006)

Jetzt steh' ich aber auch auf dem Schlauch!

Wieso ist es denn nicht möglich

```
ArrayList<String>[] strArrays = new ArrayList<String>[13];
```
zu definieren?  :shock: 

Was spricht da denn dagegen?  ???:L  :###  ???:L


----------



## Kola (2. Aug 2006)

Also "ArrayList<String> [] arr = new ArrayList[13];" nimmt mein Compiler noch entgegen (mit einer Warnung zur Typsicherheit). Komisch, dass man generische Arrays deklarieren, aber nicht definieren kann! Habe ich allerdings auch noch nie gebraucht.
Wieder was gelernt!


----------



## Leroy42 (2. Aug 2006)

Kola hat gesagt.:
			
		

> Komisch, dass man generische Arrays deklarieren, aber nicht definieren kann! Habe ich allerdings auch noch nie gebraucht.
> Wieder was gelernt!



Ich erst sobald ich weiß *warum* das (scheinbar(*)) so ist.  :x 



(*) Nein, nein! Ich habe _scheinbar_ mit voller Absicht geschrieben...


----------



## Murray (2. Aug 2006)

Eine Begründung für die Nichtunterstützung generischer Arrays findet sich hier (im Abschnitt "More covariance troubles").


----------

