【发布时间】:2011-01-15 09:34:18
【问题描述】:
我今天遇到了一些我发现有问题的代码。这是一个简化的例子(不现实)。
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<GroceryItem> groceries;
public GroceryList() {
this.groceries = new ArrayList<GroceryItem>();
}
public ArrayList<GroceryItem> getFirstNThings(int n) {
ArrayList<GroceryItem> firstNThings = new ArrayList<GroceryItem>();
for (int i=0; i < n; i++) {
firstNThings.add(this.groceries.get(i));
}
return firstNThings
}
public ArrayList<GroceryItem> getLastNThings(int n) {
ArrayList<GroceryItem> lastNThings = new ArrayList<GroceryItem>();
for (int i=this.groceries.size(); i < this.groceries.size()-n; i--) {
lastNThings.add(this.groceries.get(i-1);
}
return lastNThings;
}
}
忽略您可能会发现的任何实现问题(我也发现了一些)。我的意思是,该接口不使用 ArrayList 的任何泛型类型参数(即 ArrayList>),但接口方法的实现者使用(即 ArrayList
所以我的问题是:这是一个问题吗?我应该重构什么吗?这值得么?有什么好处?如果我在接口中定义了一个返回类型为原始类型的方法,但该方法的实际实现者返回了各种参数化类型,我会遇到什么样的问题?
【问题讨论】:
-
除了 sfussenegger 所说的,我也更喜欢返回
List而不是ArrayList的方法。
标签: java generics oop collections interface