2009-10-17 68 views
1

我剛開始弄懂泛型,我想確保我得到了這個正確的,任何幫助?這是一個正確的方式來使Java泛型行動?

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 
} 

調用CartService:

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

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

回答

4

您的代碼看起來不錯。 @sudo noob與聲明「擴展應該是實現」是錯誤的。

我@sudo小白同意,你應該改變行:

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

...有:

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

但這已經無關,與仿製藥。

+0

+1:比我自己的描述更具描述性,我在工具上進行了更正。 :) – 2009-10-17 07:28:52

相關問題