# wert zu liste hinzufügen



## feuervogel (29. Mai 2005)

ich komme mir grade sehr blöd vor, aber das hier:


```
import Tools.IO.*;
import java.util.*;
import java.lang.*;


public class Jpp_a3 {

	public int main (  ) {

		List liste = new ArrayList();

		liste.add( 4 );

		return 0;

	}
}
```

bringt mir den fehler:


> Jpp_a3.java:13: cannot resolve symbol
> symbol  : method add (int)
> location: interface java.util.List
> liste.add( 4 );
> ...



ich habe absolut keinen plan, wieso! ich will doch einfahc nur die die 4 an die liste hinten dran hängen :-(


----------



## mic_checker (29. Mai 2005)

add(..) erwartet als Parameter ein Objekt, d.h. du musst die Wrapper Klasse Integer benutzen.


----------



## Dreezard (29. Mai 2005)

es gibt keine add(int) Methode des Interfaces List.
Man kann IMHO nur Objekte adden.
Mit Reflections hab ich mich leider noch garnicht befasst, also kann ich da nicht allzuviel sagen.


----------



## feuervogel (29. Mai 2005)

ich denke in java ist *alles* ein objekt?


----------



## Roar (29. Mai 2005)

ja, alles bis auf primitive datentypen


----------



## SebiB90 (29. Mai 2005)

fast alles...
int, byte, short,char, long sind primitive daten typen und somit keine objecte, aber bei long bin ich mir nicht sicher. float und double sind glaub ich schon objecte.


----------



## Dreezard (29. Mai 2005)

Java != Python   ;-)

EDIT: ALLE primitiven typen sind keine Objekte in Java auch keine foats und doubles (sonst würdest du keine Wrapper-klasse dazu finden)


----------



## feuervogel (29. Mai 2005)

toll, schön so ne hybrid-sprache...! 

so, das ist nun meine lösung:


```
import Tools.IO.*;
import java.util.*;
import java.lang.*;

public class Jpp_a3 {

	public int main (  ) {

		List liste = new ArrayList();

		Integer i = new Integer( 5 );

		liste.add( i );

		return 0;

	}
}
```

danke an alle für diese erleuchtung am nachmittag!


----------



## Dreezard (29. Mai 2005)

jo so geht's. Wobei man das auch kürzer schreiben könnte:

```
liste.add(new Integer(5));
```

Hybridsprache...

Also wen du das so siehst sind nahezu alle programmiersprachen hybrid bis auf Python und ... da gab's doch nocheine, weil sie vollständig Objektorientiert designed sind. Nicht einmal C++ ist vollständig Objektorientiert. Aber ich bin der Meinung, dass das auch vorteile hat. z.B.: in Sachen Hardwarenahe programmierung


----------



## Wildcard (29. Mai 2005)

Dreezard hat gesagt.:
			
		

> ```
> liste.add(new Integer(5));
> ```


besser so, da man auf diese Art weniger Objekte erzeugt:

```
liste.add(Integer.valueOf(5));
```


----------



## Dreezard (29. Mai 2005)

ok, hast gewonnen ;-)


----------



## Dreezard (29. Mai 2005)

Wobei, nein, das ist auch nicht effektiver.
sowohl "new Integer(5)" als auch "Integer.valueOf(5)" erzeugen genau ein Objekt!


----------



## Wildcard (29. Mai 2005)

früher mal. Mach mal ein update auf Java 5  :wink:


----------



## Dreezard (29. Mai 2005)

Ich hab den Tiger...
Aber mir ist trozdem nicht ganz klar wo da ein weiteres Objekt herkommen soll

EDIT: Ah ok, die API Doc sagt das ja auch...


----------



## Wildcard (29. Mai 2005)

new Integer erzeugt nur ein Objekt, das ist schon richtig. valueOf erzeugt im Idealfall aber gar keins:


			
				API hat gesagt.:
			
		

> /**
> 
> ```
> * Returns a <tt>Integer</tt> instance representing the specified
> ...


----------



## Dreezard (29. Mai 2005)

Ah! Wieder was dazu gelernt. Danke!


----------



## Guest (1. Jun 2005)

Hallo!

Hab da noch eine Frage zu den Arraylisten. Wieso schreiben hier viele "Tippgeber" im Forum immer

```
List list = new ArrayList();
```

Ich hab das deswegen auch so gemacht. Jetzt bin ich aber graufgekommen, dass ich ja dann auf einige Methoden wie z.B. trimToSize() nicht verwenden kann.

Was hat es dann für einen Sinn, die Liste in der obigen Form zu erstellen und nicht gleich


```
ArrayList list = new ArrayList();
```

zu schreiben?

Danke


----------



## Wildcard (1. Jun 2005)

Wo immer möglich über Interfaces arbeiten (nicht nur bei Listen) um deine Anwendung flexibel zu gestallten. 
Wenn du irgendwann merkst das eine ArrayList nicht das richtige war weil du zB einen synchronisierten Vector oder eine eigene Liste brauchts,
musst du nur eine einzige Stelle im Programm ändern. Du kommst auch gar nicht in Versuchung Methoden wie getElementAt zu verwenden, was dir ebenfalls Probleme bei der Umstellung bereiten würde.
Interfaces erleichtern die Kapselung verschiedener Klassen enorm, so kann is dir zum beispiel egal sein ob die Methode getUsefullElemetsList der KlasseX eine ArrayList, einen Vector oder eine LinkedList verwendet, solange du weißt das du eine Liste bekommst. 
Hoffe das hilft dir weiter...


----------



## Bleiglanz (2. Jun 2005)

alter OO Hut:

program to the interface, not the implemenation

wenn du mit List arbeitest, stellst du sicher, dass alle weiteren Schritte mit JEDER Implementierung von List funktionieren; du kannst ggf. dann später die Implementierung ( ..= new xyzList() einfacher auswechseln

so wird dein code "robuster" (in einem gewissen Sinn)

wenn (wie in deinem Fall) trotzdem einmal die Situation auftaucht, dass du eine ArrayList BRAUCHST, dann ist dieses Muster natürlich nicht angebracht, du kannst aber - wenn es nur um eine Luxusfunktion geht - einfach 


```
if(list instanceOf ArrayList) ((ArrayList) list).trimToSize();
```

schreiben, das ist natürlich nur dann OK, wenn der Aufruf für das Prog nicht zwingend erforderlich ist


----------

