如何使Integer实例不可为空

时间:2014-06-10 08:09:22

标签: java list integer nullable

有没有办法确保Integer变量不是null

我需要创建一个整数值列表,因此我不能使用int类型。我需要使用List<Integer>,但这将允许元素的null值...

我是否需要使用List的某些特定实现,或者是否有某种方法可以将Integer设置为不可为空?

注意我需要List,而不是Set

5 个答案:

答案 0 :(得分:4)

不,没有。最简单的方法就是添加预检:

if (intVal != null) {
  list.add(intVal);
} else {
 // TODO: error handling
}

无论如何,你必须处理自定义数据结构的异常/返回值,它不允许使用NULL。

答案 1 :(得分:4)

您可以覆盖List的add方法并检查该元素是否为null。

new LinkedList<Integer>() {
    @Override
    public boolean add(Integer e) {
        if(e == null)
            return false;
        return super.add(e);
    }
};

您可能需要将此检查添加到其他插入方法,如add(int pos,E value)或set(int pos,E value)。

答案 2 :(得分:1)

只是为了完成上面的答案。如果您使用的是java8,则可以从Optional类中受益。

答案 3 :(得分:0)

使用Queue实现,比如LinkedBlockingQueue,其中许多都不允许空值。

查看http://docs.oracle.com/javase/tutorial/collections/implementations/queue.html

我还建议你看看Lombok的NonNull注释:

http://projectlombok.org/features/NonNull.html

答案 4 :(得分:0)

您可以在填充列表后尝试使用Google Guava Collections2.filter()方法过滤掉空值:

    List<Integer> myList = new ArrayList<Integer>();
    myList.add(new Integer(2));
    myList.add(null);
    myList.add(new Integer(2));
    myList.add(new Integer(2));
    myList.add(null);
    myList.add(new Integer(2));

    myList = new ArrayList<Integer>(Collections2.filter(myList, new Predicate<Integer>() {
        @Override
        public boolean apply(Integer integer) {
            return integer != null;
        }
    }));

    System.out.println(myList); //outputs [2, 2, 2, 2]