# In die Liste kann ich nichts adden



## zeyu29 (6. Okt 2015)

Hallo,

ich teste gerade mit JUnit. Um mein Test laufen zu lassen habe ich eine neue Liste
"Liste<? extends Kontakte>" erstellt.

Aber das problem ist, ich kann nichts in diese Liste adden!

@mock
Kontakte kontakt;

Liste<Kontakte> list = new ArrayList <Kontakte>();

list.add(kontakt);//dies läuft


Diese obere Code läuft einwandfrei aber das bringt mich nicht weiter, weil sie iwie kein Einfluss auf meine getestete Klasse hat, die liste muss genau wie unten aussehen.

@mock
Kontaktimpl impl; // Kontaktimpl extends XKlasse interface Kontakte{...}

Liste<? extends Kontakte> list = new ArrayList <? extends Kontakte>();

list.add(new Kontaktimpl);// klappt nicht(syntaxFehler)
list.add(impl);// klappt auch nicht(syntaxFehler)
list.add(null);//kein syntaxFehler aber die Liste ist dann zwar nicht leer aber mit null gefüllt!!!  

also was oder wie kann ich in die Liste "Liste<? extends Kontakte>"  hinzufügen??


----------



## Joose (6. Okt 2015)

Schön und gut so ganz ist mir das Problem nicht klar. Hilfreich wäre es sicher wenn du uns auch sagen würdest welche Syntaxfehler angezeigt werden? Dadurch erfährt man so einigen. Raten um welche es sich handelt fällt uns allen etwas schwer.


----------



## Sogomn (6. Okt 2015)

Die Klasse "Liste" gibt es nicht. Selbst wenn es eine selbst geschriebene wäre, könnte man sie nicht als ArrayList initialisieren. Polymorphie funktioniert nicht rückwärts.
Neue Objekte initialisiert man mit zwei Klammern für die Parameter: 
	
	
	
	





```
new Object();
```

Die Variable "impl" ist nicht initialisiert.


----------



## zeyu29 (6. Okt 2015)

Joose:

Die Fehlermeldung sagt mir nur dass ich ein Element adden muss  

Es wird mit auch kein Lösungsvorschlag von eclipse angeboten! Add ist nur rot unterstrichen wenn ich mit der Maus da drauf bin wird mir nur element angezeigt!

Habe auch viel gegooglet! Ich möchte wissen was ich alles in diese Liste hinzufügen kann 

Liste<? extends Kontakte> list = new ArrayList <? extends Kontakte>();

Man kann ja in eine Liste nur die Sachen adden, die den gleichen Typ haben. Also z.B. wie hier

Kontakte kontakt;// Interface

Liste<Kontakte> list = new ArrayList <Kontakte>();

list.add(kontakt);//dies läuft

Aber wenn man liste so aussieht:

 Liste<? extends Kontakte> list = new ArrayList <? extends Kontakte>();

Was kann man alles in diese Liste adden???


Bin leider noch keine Java Expertin, tut mir leid, wenn ich mich nicht richtig ausdrücken kann


----------



## zeyu29 (6. Okt 2015)

Sogom:

Ich habe oben keine Klasse mit List! habe leider nicht genau verstanden wie du es meinst


----------



## Sogomn (6. Okt 2015)

Es gibt einfach keine Klasse "Liste" in der Java API.


----------



## zeyu29 (6. Okt 2015)

Ja, das weiß ich. Aber ich habe leider immer noch nicht rausbekommen, wie ich so eine Liste füllen kann????

List<? extends Kontakt> list = new ArrayList < ? extends Kontakt>();


----------



## Sogomn (6. Okt 2015)

```
final ArrayList<Kontakt> kontakte = new ArrayList<Kontakt>();
final Kontakt meinKontakt = new Kontakt();

kontakte.add(new Kontakt());
kontakte.add(meinKontakt);
```


----------



## zeyu29 (6. Okt 2015)

Ich hatte es so versucht. Anscheinen habe ich mich nicht richtig ausgedrückt aber trotzdem vielen Dank für die Bemühung !


----------



## Sogomn (6. Okt 2015)

> trotzdem vielen Dank für die Bemühung !


Das Problem liegt einzig bei dir. Es kann dir auch keiner helfen, wenn du keinen Code bzw. Fehler dazuschreibst.


----------



## nvidia (6. Okt 2015)

Sogomn hat gesagt.:


> Das Problem liegt einzig bei dir. Es kann dir auch keiner helfen, wenn du keinen Code bzw. Fehler dazuschreibst.



Er hat geschrieben was er für ein Problem hat. Vielleicht solltest du jedoch dein Wissen zu den Java-Generics aufpolieren. 

http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
http://www.angelikalanger.com/Articles/EffectiveJava/31.Wildcards/31.Wildcards.html

Und man findet leicht weitere Quellen die etwas über beschränkte Wildcards in Generics erzählen und welche Implikationen das in bestimmten Kontexten hat.


----------



## Sogomn (6. Okt 2015)

nvidia hat gesagt.:


> Er hat geschrieben was er für ein Problem hat


Nicht wirklich. Sonst wäre es von einem der drei Hilfestellern gelöst worden.


----------



## Joose (7. Okt 2015)

nvidia hat gesagt.:


> Er .... er für ein Problem hat.



Nicht er, sie 

@Sogomn 
Das Problem wurde beschrieben einzig die Fehlermeldung könnte man hier noch posten (Wort für Wort).


----------



## zeyu29 (7. Okt 2015)

Hallo nochmal  Es konnte leider nicht mit den oben angebotenen drei Hilfestellungen gelöst werden!
Ich habe mein Problem selbst gelöst  und bin sehr sehr glücklich. 
Es muss so aussehen! 
Hier ist die Lösung vielleicht kann es ja auch irgendwann irgendjemand gebrauchen.

@mock
Kontakte kontakt;

@test
public void test()
{
List<? extends Kontakt> kontaktenliste = new ArrayList <? extends Kontakt>();
//hier muss man nur den obere Liste als Parameter aufrufen
Liste<Kontakte> list = new ArrayList <Kontakte>(kontaktenliste);

list.add(kontakt);//dann kann man die variable in die neue liste adden

......
}


----------



## nvidia (7. Okt 2015)

zeyu29 hat gesagt.:


> [...]
> Ich habe mein Problem selbst gelöst  und bin sehr sehr glücklich.
> Es muss so aussehen!
> Hier ist die Lösung vielleicht kann es ja auch irgendwann irgendjemand gebrauchen.
> [...]



Und ist dir klar weshalb das so ist? Hast du das eigentliche Problem verstanden oder einfach nur solange probiert bis es endlich klappte? Falls Letzeres der Fall ist, solltest du dich ganz dringend mit dem Thema Generics auseinandersetzen, auf Deutsch z.B. unter http://www.angelikalanger.com/Articles/EffectiveJava/30.GenericsIntro/30.GenericsIntro.html und den fortfolgenden Links.


----------



## zeyu29 (7. Okt 2015)

nvidia
Wow, das ist eine super Link vielen Dank  ich werde mich aufjeden Fall damit beschäftigen


----------



## Tarrew (7. Okt 2015)

Mich wundert ehrlich gesagt, dass das funktioniert: 

```
List<? extends Kontakt> kontaktenliste = new ArrayList <? extends Kontakt>();
```

Soll sich der Compiler den Typ aussuchen von dem die Liste ist oder was? Also bei mir kompiliert das nicht.


----------

