相关疑难解决方法(0)

布尔值,条件运算符和自动装箱

为什么这会抛出 NullPointerException

public static void main(String[] args) throws Exception {
    Boolean b = true ? returnsNull() : false; // NPE on this line.
    System.out.println(b);
}

public static Boolean returnsNull() {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

虽然这不是

public static void main(String[] args) throws Exception {
    Boolean b = true ? null : false;
    System.out.println(b); // null
}
Run Code Online (Sandbox Code Playgroud)

解决办法是更换的方式false通过Boolean.FALSE,以避免null被拆箱到boolean,可呈现是不可能的.但这不是问题.问题是为什么?JLS中是否有任何引用证实了这种行为,尤其是第二种情况?

java autoboxing boolean nullpointerexception conditional-operator

128
推荐指数
3
解决办法
2万
查看次数

Java,Google Collections Library; AbstractIterator有问题吗?

我正在使用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;
        }
      };
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

我也尝试摆弄这个?:安排(例如,在返回前加上前缀并比较+1),但无济于事.我捅了一下寻找关于这个的文档,但没有找到任何东西.显然,?:语法只是方便,不是必需品,但仍然......

java iterator iterable guava

2
推荐指数
1
解决办法
464
查看次数