首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认迭代和其他迭代

默认迭代和其他迭代
EN

Stack Overflow用户
提问于 2014-06-20 17:37:28
回答 2查看 48关注 0票数 0

我希望有一个类,其中的一些方法返回不同的Iterable,如下所示:

代码语言:javascript
运行
复制
public class MyClass<T extends Comparable<T>> {
  ...

  public Iterable<T> iterable1() {
    return new Iterable1<T>();
  }

  public Iterable<T> iterable2() {
    return new Iterable2<T>();
  }

  public Iterable<T> iterable3() {
    return new Iterable3<T>();
  }

}

但是我也想为类MyClass (比如说Iterable1)提供一个默认的Iterable。我知道我可以让MyClass扩展Iterable并在其中实现默认策略,但我不想这样做,因为我想要一个干净的接口。

我希望能够这样写:

代码语言:javascript
运行
复制
for(T t : myClass) //Here it should use Iterable1
  //do something

代码语言:javascript
运行
复制
for(T t : myClass.iterable1()) //Here it should use Iterable1 again
  //do something

代码语言:javascript
运行
复制
for(T t : myClass.iterable2()) //Here it uses Iterable2
  //do something

诸若此类。不过,我想不出很多模式来实现这一点。

EN

回答 2

Stack Overflow用户

发布于 2014-06-20 17:48:49

您的顶级类需要实现IterableIterable接口定义了一个方法

代码语言:javascript
运行
复制
Iterator<T> iterator();

它将在您的情况下提供“默认”迭代器。

您的类需要看起来有点像这样:

代码语言:javascript
运行
复制
public class MyClass<T extends Comparable<T>> implements Iterable<T> {
  ...

  Iterator<T> iterator() {
    return new Iterable1<T>().iterator();
  }

  public Iterable<T> iterable1() {
   return new Iterable1<T>();
  }

  public Iterable<T> iterable2() {
   return new Iterable2<T>();
  }

  public Iterable<T> iterable3() {
   return new Iterable3<T>();
  }

}
票数 1
EN

Stack Overflow用户

发布于 2014-06-20 17:52:17

如果你想让它工作:

代码语言:javascript
运行
复制
    MyClass myObject = ...
    for (T t : myObject) {
          ....

那么MyClass必须实现Iterable<T>JLS 14.14.2说:

“表达式的类型必须是可迭代的或数组类型(§10.1),否则会发生编译时错误。”

其中“表达式”指的是myObject

我知道我可以让MyClass extend (原文如此)可迭代,并在其中实现默认策略,但我不想这样做,因为我想要一个干净的接口。

抱歉,但这在Java中是不可能的。请参见上面的。

我想在

中使用一些技巧。MyClass扩展了Iterable1或类似的东西。

这实际上等同于让MyClass实现Iterable ...假设Iterable1实现了Iterable

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24324238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档