这是我的代码:
while (itr.hasNext()) {
System.out.println(itr.next());
}
itr
的类型为Iterator
。
如果itr
为null
,那么我面临空指针异常。
我已尝试使用if condition
检查itr
之前null
是否不是while loop
。
如下所示:
if (itr != null) {
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
还有其他更好的方法吗?
答案 0 :(得分:1)
只有在故意为Iterator指定null时,您使用的代码才会抛出Null Pointer异常。例如。即使没有为exampleList分配任何元素,下面的代码也不会抛出异常。
List<String> exampleList = new ArrayList<String>();
Iterator<String> itr = exampleList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
但是当您尝试在Null列表上创建迭代器时,下面的代码将抛出一个空指针异常。
List<String> exampleList = null;
Iterator<String> itr = exampleList.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
如果要初始化要创建迭代器的列表,请检查代码。如果你正确地执行它,那么就不需要检查Null指针。
答案 1 :(得分:0)
你的方法似乎更好,但这是另一种方法:
while (itr != null && itr.hasNext()) {
System.out.println(itr.next());
}
答案 2 :(得分:0)
if (null != itr && itr.hasNext()) {
do {
System.out.println(itr.next());
} while (itr.hasNext());
}
答案 3 :(得分:0)
只是为了混合而提出另一个答案:
while(Optional.ofNullable(itr).orElse(EmptyIterator.INSTANCE).hasNext()) {
System.out.println(itr.next());
}
或者也许:
Optional.ofNullable(itr).map(item -> {
while(item.hasNext()) {
System.out.println(item.next());
}
});
现在确定.map将如何处理println void return。