Java、谷歌收藏图书馆;问题AbstractIterator?
题
我使用的是谷歌的收藏图书馆 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的错
不隶属于 StackOverflow