这是一个正确的方式来使Java泛型行动?
问题描述:
我刚开始弄懂泛型,我想确保我得到了这个正确的,任何帮助?这是一个正确的方式来使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);
答
您的代码看起来不错。 @sudo noob与声明“扩展应该是实现”是错误的。
我@sudo小白同意,你应该改变行:
GroceryCartImpl gc = ............
GroceryCartItemImpl gci = ...........
...有:
GroceryCart gc = ............
GroceryCartItem gci = ...........
但这已经无关,与仿制药。
+1:比我自己的描述更具描述性,我在工具上进行了更正。 :) – 2009-10-17 07:28:52