mardi 26 mai 2009

Java : Gestion des listes; généricité et problème d'héritage

Voici la description d'un problème simple concernant les génériques en Java.
Dans une classe commande qui permet de gérer la commande d'un client dans un site marchand, nous devons y stocker la liste des lignes de commandes (OrderLines).
Devant gérer plusieurs types de lignes de commandes en fonction des produits commandés : Téléphone (géré par la classe ObjectOrderLine), abonnement (géré par la classe SubscriptionOrderLine)

Notre classe commande ressemblera donc à cela
class Order {

private long id;

private User user;

private List orderLines;

...
}

Le client commande une liste d'objet & accessoires
List orderedObjects = new ArrayList ();

Il ne sera pas possible de faire
order.getOrderLines.addAll(orderedObjects);

En effet, le compilateur s'attend à avoir une liste d'objet du type OrderLine et non pas une de ses sous classes.

Dans ce cas, il suffit d'utiliser les wildcards pour s'en sortir aisement.
class Order {
private List orderLines;

}

1 commentaire: