Java 此NullPointerException是否指getFoos返回null或从集合到ArrayList的强制转换出现问题?

Java 此NullPointerException是否指getFoos返回null或从集合到ArrayList的强制转换出现问题?,java,collections,casting,arraylist,nullpointerexception,Java,Collections,Casting,Arraylist,Nullpointerexception,为什么此行会导致NullPointerException: List<Foo> foos = new ArrayList<Foo>(userDetailsService.getFoos(currentUser)); 我无法判断NullPointerException是否指getFoos返回null,或者从集合到数组列表的转换是否存在问题取决于堆栈跟踪。去第一排。如果它指向java.util.ArrayList.,则getFoos()已返回null。或者,如果它指

为什么此行会导致
NullPointerException

    List<Foo> foos = new ArrayList<Foo>(userDetailsService.getFoos(currentUser));

我无法判断
NullPointerException
是否指
getFoos
返回
null
,或者从
集合到
数组列表的转换是否存在问题取决于堆栈跟踪。去第一排。如果它指向
java.util.ArrayList.
,则
getFoos()
已返回
null
。或者,如果它指向问题中的特定行,则
userDetailsService
null

我看不出这辆车 NullPointerException引用getFoos 返回null或存在某些问题 从一个集合到另一个集合的演员阵容 ArrayList

这就是为什么我们有这样的机会。如果你把连在一起的两个陈述分开,你将有更好的运气解决这个问题

但是,很明显,返回的是一个空集合(不是空集合),它负责该问题。毕竟,使用空集合调用ArrayList构造函数不会导致空指针异常

编辑

我的错。ArrayList构造函数将尝试复制集合。因此,空集合可能导致空指针异常。我坚持我最初的建议,将这两种说法分离开来。以以下方式编码将有助于更快地识别问题:

Collection<Foo> myFoos = userDetailsService.getFoos(currentUser);
List<Foo> foos = new ArrayList<Foo>(myFoos);
Collection myFoos=userdetailssservice.getFoos(当前用户);
List foos=新的ArrayList(myFoos);

失败的typecast无法为您提供
NullPointerException

Object o = new Integer(43);
String s = (String) o;  // throws ClassCastException
类型转换
null
根本不会引发异常

o = null;
String s = (String) o;  // no exception
因此,
getFoo
返回
null
的理论是合理的。但也可能是
userDetailsService
null
,或者NPE被抛出
getFoo


您应该能够通过仔细阅读stacktrace来区分这些情况。。。您的问题中没有包含的内容(tsk,tsk)。

-1表示不发布堆栈跟踪。完全同意将语句拆分为两个单独的语句。然后,我们应该明确哪些是失败的。
o = null;
String s = (String) o;  // no exception