Frage zu Rückgabewert List und ArrayList

Hallo,

bin mal wieder mit dem Selbststudium eines Buches beschäftigt. Da beginnt eine Einkaufswagen-Datenstruktur-Klasse folgendermaßen:

public class Shopping Cart
{
private ArrayList itemsOrdered;

public ShoppingCart()
{
itemsOrdered = new ArrayList();
}

public List getItemsOrdered()
{
return itemsOrdered;
}

[……]
}

Über der getItemsOrdered()-Methode wird im Buch kommentiert: „Als Rückgabe wurde List anstelle von ArrayList deklariert, so dass die zugrunde liegende Implementierung bei Bedarf jederzeit problemlos geändert werden kann.“

Nun wollte ich hier mal nachfragen, wie das gemeint ist. Kann mir jemand vielleicht ein Beispiel nennen, wie sich die Implementierung unter Nutzung des Rückgabewertes List ‚problemlos ändern’ lässt?

Danke, danke, für Antworten!

Grüße, Lars

Hallo.

Z.B. so:

> public class Shopping Cart  
> {  
> private Vector itemsOrdered;  
>   
> public ShoppingCart()  
> {  
> itemsOrdered = new Vector();  
> }  
>   
> public List getItemsOrdered()  
> {  
> return itemsOrdered;  
> }  
>   
> […..]  
> }

Nun wollte ich hier mal nachfragen, wie das gemeint ist. Kann
mir jemand vielleicht ein Beispiel nennen, wie sich die
Implementierung unter Nutzung des Rückgabewertes List
‚problemlos ändern’ lässt?

List ist ein Interface, dass von verschiedenen Klassen implementiert wird. Dadruch, dass als Rückgabetyp List genommen wird, weiß derjenige, der die Funktion aufruft, dass er halt irgendeinen solchen Typ bekommt. Welchen genau, ist unbekannt. Aber das Interface List definiert einige Zugriffsmethoden, die jede dieser Implementationen garantiert hat. Intern verwendet die Klasse ShoppingCart nun eine beliebige dieser Implementationen, im Beispiel halt ArrayList. Ergibt sich nun die Situation, dass die Klasse erweitert werden soll, und dabei stellt sich heraus, dass z.B. Vector besser geeignet wäre, so kann man dass innerhalb dieser Klasse einfach ändern, ohne dass sich außerhalb der Klasse was ändert.

Sebastian.

Hallo Sebastian,

kann ein Vector denn tatsächlich als List zurückgegeben werden? Dann müßte doch die Klasse Vector List implementieren, oder? Hm, ich guck’ mal in die API …

Gruß, Lars

Hallo.

kann ein Vector denn tatsächlich als List zurückgegeben
werden? Dann müßte doch die Klasse Vector List implementieren,
oder? Hm, ich guck’ mal in die API …

Ja, Vector implementiert das Interface List.

Sebastian.