当前位置: 首页 > 面试题库 >

Java,Google收藏库;问题与AbstractIterator?

甘学潞
2023-03-14
问题内容

我正在使用Google Collections库AbstractIterator来实现生成器。我在这样做时遇到了一个问题;我将其简化为更基本的类型,并重现了问题。这种减少显然是对它所做的事情的过度杀伤,通过Iterable从1到数位计数。

本质上,在以下代码中,未注释的版本有效,而注释的版本无效(最后提供一个null元素,而不是最后一个数字结尾)。

我是在做错什么,还是这是图书馆的问题?

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由于使用三元运算符,条件表达式和不同的数值类型,因此会得到a
。在三元表达式中混合使用不同类型的数值时,Java具有复杂的规则JLS Section 15.25

鉴于endOfData()被preceived以回报Integer,而localcountint,爪哇unboxes的价值endOfData()。但是,给定endOfData()返回null,则取消装箱操作将导致null指针异常。

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



 类似资料:
  • 问题内容: 我只是在SO中碰到了这个答案,其中提到Google集合MapMaker很棒。我浏览了文档,但无法真正弄清楚我可以在哪里使用它。有人可以指出某些情况下的情况。适合使用MapMaker。 问题答案: 这是我使用过的一种方法的快速示例: 在地图上调用时,它会返回该ID在地图上的ID,或者会从服务器中检索它,对其进行缓存并返回。设置完成后,我无需考虑。另外,由于设置了,因此缓存无法填满并引起内

  • 1.创建线程 共有四种方式可以创建线程,分别是:继承Thread类、实现runnable接口、实现Callable接口、线程池创建线程 详细创建方式参考下面代码: ① 继承Thread类 public class MyThread extends Thread { @Override public void run() { System.out.println("

  • 收藏资讯 取消收藏资讯 获取收藏资讯 收藏资讯 POST /news/{news}/collections Response Headers Status: 201 Created 取消收藏资讯 DELETE /news/{news}/collections Response Headers Status: 204 No Content 获取收藏资讯 GET /news/collectio

  • 收藏列表 添加收藏 取消收藏 获取用户收藏的专辑 GET /music/collections Response Status: 200 OK [ { "id": 2, // 专辑id "created_at": "2017-03-15 17:04:31", "updated_at": "2017-06-27 18:40:56", "title": "少女情

  • 收藏 取消收藏 收藏列表 收藏 POST /feeds/:feed/collections Response Status: 201 Created { "message": [ "收藏成功" ] } 取消收藏 DELETE /feeds/:feed/uncollect Response Status: 204 No Centent 收藏列表 GET /feeds/col

  • 我正在构建一个应用程序,它会显示一个窗口,询问用户是否要使用两个按钮选项暂停计算机,其中一个是“是”,电脑将暂停。 另一个名为“稍后”的按钮应该隐藏窗口,一个小时后它再次出现,并提出相同的问题。 “后来的巴特顿”的代码 你在代码中看到的布尔是bc,这是我认为我可以控制的方式,相信我,我尝试了不同的方式,但没有人只是帮我解决这个问题,这是GUI类的代码 我知道那个平台。退出();终止程序,但当我只使