gpt4 book ai didi

Java,谷歌集合库; AbstractIterator 有问题吗?

转载 作者:行者123 更新时间:2023-11-30 06:38:50 24 4
gpt4 key购买 nike

我正在使用 Google Collection 库 AbstractIterator实现一个生成器。这样做时我遇到了一个问题;我已将其简化为更基本的类型并重现了该问题。这种减少对于它所做的事情来说显然是矫枉过正,通过 Iterable 从 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() 被预先设定为返回 Integer,而 localcount 是一个 int,Java 拆箱endOfData() 的值。但是,鉴于 endOfData() 返回 null,拆箱操作会导致空指针异常。

您可以继续使用 if 语句,或将 localcount 声明为 Integer

关于Java,谷歌集合库; AbstractIterator 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1821510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com