什么时候需要使用工具Iterable <t>

时间:2019-05-21 14:12:00

标签: java generics interface

我正在编写一个通用类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();
}

1 个答案:

答案 0 :(得分:1)

简单:如果您希望“集合”可以与任何其他标准Java集合一样循环,那么最好在类上使用implements Iterable<T>

关键是:拥有该界面允许用户执行此操作:

for (Bar foo : someSortedGroupOfBars) {

换句话说:只有当您完全确定永远不要使用“标准” Java模式迭代组时,才考虑在实现某种“容器”时不实现该接口。

您甚至可以更进一步,确定实施Collection还是更专业的接口(例如List)才有意义!这样做当然需要您实现更多的方法(对于“组容器”恕我直言,这都是有意义的。)

除此之外,它主要取决于您的上下文。如果您要为非常特定的任务(可能是在学校里做的一项练习)编写本课,则:编写满足您需要的 minimum 代码。那么实现不需要的接口可能是正确的选择。但是,只要该类应为“不止于此”而存在,那么实现接口是一个非常自然而直接的想法。

回答另一个被问到的问题:“委托”底层ArrayList的迭代器是一种有效的方法。