有没有办法确保Integer
变量不是null
?
我需要创建一个整数值列表,因此我不能使用int
类型。我需要使用List<Integer>
,但这将允许元素的null
值...
我是否需要使用List
的某些特定实现,或者是否有某种方法可以将Integer
设置为不可为空?
注意我需要List
,而不是Set
。
答案 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注释:
答案 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]