2009-10-17 74 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

相关问题