2009-10-17 4 views
1

Je viens de commencer à jouer avec les génériques et je veux m'assurer que j'ai bien compris, toute aide?Est-ce une bonne façon de mettre les génériques Java en action?

public interface Cart<T extends CartItem> { 
    public void setItems(List<T> items); 
    public List<T> getItems(); 
} 

public interface CartItem { 
    public BigDecimal getQty(); 
    public void setQty(BigDecimal qty); 
    // more 
} 

public class CartService<T extends Cart<E>, E extends CartItem> { 
    public void addOrReplaceItem(T cart, E newCartItem) { 
     List<E> items = cart.getItems(); 
     int position = items.indexOf(newCartItem); 
     if(position > -1) { 
      E existingItem = items.get(position); 
      existingItem.setQty(existingItem.getQty() 
              .add(newCartItem.getQty())); 
     } else { 
      items.add(newCartItem); 
     } 
    } 
} 

public interface GroceryCart extends Cart<GroceryCartItemImpl>{ 
    // more 
} 

public interface GroceryCartItem extends CartItem { 
    // more 
} 

public class GroceryCartItemImpl implements Serializable, GroceryCartItem { 
    // more 
} 

public class GroceryCartImpl implements Serializable, GroceryCart { 
    // more 
} 

Appel CartService:

GroceryCartImpl gc = ............ 
GroceryCartItemImpl gci = ........... 

CartService<GroceryCartImpl, GroceryCartItemImpl> cs = 
        new CartService<GroceryCartImpl, GroceryCartItemImpl>(); 
cs.addOrReplaceItem(gc, gci); 

Répondre

4

Votre code semble bon. @sudo noob avait tort avec l'instruction "extends should implements".

Je suis d'accord avec @sudo noob, vous devez changer les lignes:

GroceryCartImpl gc = ............ 
GroceryCartItemImpl gci = ........... 

... avec:

GroceryCart gc = ............ 
GroceryCartItem gci = ........... 

Mais cela n'a rien à voir avec les génériques.

+0

+1: Plus descriptif que le mien, et je me tiens corrigé sur les outils. :) –

Questions connexes