java使用泛型集合的好处_在返回集合的接口中使用Java泛型.最佳实践?陷阱?

我今天碰到了一些我发现有问题的代码.这是一个简化的例子(不现实).

public interface IListable {

//returns first n items from list

public ArrayList getFirstNThings(int n);

//returns last n items from list

public ArrayList getLastNThings(int n);

}

然后有一个像这样的实现者:

public GroceryList implements IListable {

private ArrayList groceries;

public GroceryList() {

this.groceries = new ArrayList();

}

public ArrayList getFirstNThings(int n) {

ArrayList firstNThings = new ArrayList();

for (int i=0; i < n; i++) {

firstNThings.add(this.groceries.get(i));

}

return firstNThings

}

public ArrayList getLastNThings(int n) {

ArrayList lastNThings = new ArrayList();

for (int i=this.groceries.size(); i < this.groceries.size()-n; i--) {

lastNThings.add(this.groceries.get(i-1);

}

return lastNThings;

}

}

忽略你可能发现的任何实现问题(我也发现了一些).我得到的是接口不使用ArrayList的任何泛型类型参数(即ArrayList),但是接口方法的实现者(即ArrayList< GroceryList>).其他实现者可以使用任何其他类型参数返回ArrayLists,不是吗?

所以我的问题:这是一个问题吗?我应该重构一下吗?这值得么?有什么好处?如果我在返回类型为原始类型的接口中定义了一个方法,但是该方法的实际实现者返回各种参数化类型,我可以遇到什么样的问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值