我正在编写一个通用类SortedGroup,以便通用类型implements Comparable<T>
。类签名是
public class SortedGroup<T extends Comparable<T>>
。
我需要编写一个返回通用类型的迭代器的方法。
问题是:
是否需要使用Iterable这样的工具编写类签名:
public class SortedGroup<T extends Comparable<T>> implements Iterable<T>
或者我可以不用implements Iterable<T>
来写吗?
我不清楚,因为无论是否使用
,我都不会出错 implements Iterable<T>
。
编辑:该类正在使用ArrayList存储数据。所以我正在使用它的迭代器方法。
下面编写的方法是否正确?
public Iterator<T> iterator()
{
return list.iterator();
}
答案 0 :(得分:1)
简单:如果您希望“集合”可以与任何其他标准Java集合一样循环,那么最好在类上使用implements Iterable<T>
。
关键是:拥有该界面允许用户执行此操作:
for (Bar foo : someSortedGroupOfBars) {
换句话说:只有当您完全确定永远不要使用“标准” Java模式迭代组时,才考虑在实现某种“容器”时不实现该接口。
您甚至可以更进一步,确定实施Collection
还是更专业的接口(例如List
)才有意义!这样做当然需要您实现更多的方法(对于“组容器”恕我直言,这都是有意义的。)
除此之外,它主要取决于您的上下文。如果您要为非常特定的任务(可能是在学校里做的一项练习)编写本课,则:编写满足您需要的 minimum 代码。那么不实现不需要的接口可能是正确的选择。但是,只要该类应为“不止于此”而存在,那么实现接口是一个非常自然而直接的想法。
回答另一个被问到的问题:“委托”底层ArrayList的迭代器是一种有效的方法。