我使用的是谷歌的收藏图书馆 AbstractIterator 实现一个发电机。我跑过一问题的同时这样做;我已经减少到一个更基本的类型和再现问题。这种减少显然是矫枉过正用它做什么,从1数到numelements通过一个迭代.

基本上在下列代码,注释版作品,并评论了一个不(提供了一个空件上,而不是结束的最后一数字)。

我做错了什么,或者这一问题的图书馆?

private Iterable<Integer> elementGenerator(final int numelements) {
  return new Iterable<Integer>() {
    @Override public Iterator<Integer> iterator() {
      return new AbstractIterator<Integer>(){
        int localcount=0;
        @Override protected Integer computeNext() {
          if (localcount++ == numelements) return endOfData();
          return localcount;
          // return (localcount++ == numelements) ? endOfData() : localcount;
        }
      };
    }
  };
}

我还想摆弄的 ?: 安排(例如,前缀的返回和比较+1),也没有用。我戳了一下周围寻找的文件的关于这一点,但没有发现任何东西。显然, ?: 语法只是一种方便,不必要的,但仍然...

有帮助吗?

解决方案

你会得到一个 NullPointerException 因为使用的三元操作,有条件的表达,具有不同的数值类型。Java具有复杂的规则时的混合数值的不同类型中的三的表达: JLS Section 15.25.

endOfData() 是preceived返回 Integer, 同时 localcount 是一个 int, Java unboxes的价值 endOfData().然而,鉴 endOfData() 返回的一个空,拆箱操作结果纳入一个空的指针例外。

你可以继续使用,如果声明或声明localcount作 Integer.

其他提示

我期望问题是与你的使用后置运算符,与三元运算符结合为好。因为从旁白,这两个片段应该是完全等价的 - 如果他们不是因为没有它的代码是被称为在这一点上它几乎没有了AbstractIterator的错

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top