我有一个方法:
public long getAppropriatePMStyleId(Office office, KMLFolder kmlFolder) {
Long id = null;
KMLFolder folderForStyle = kmlFolder;
if (kmlFolder.getParentKMLFolderId() != null) {
folderForStyle = kmlFolderServiceImpl.find(kmlFolder.getParentKMLFolderId());
getAppropriatePMStyleId(office, folderForStyle);
} else {
id = Long.parseLong(folderForStyle.getId());
}
return id;
}
我已经通过调试器观察到该方法正常工作,直到遇到else情况。如果是这样,传入方法的kmlFolder的id将在调试器面板中分配。但是,当我进入突出显示return id
语句的位置时,应用程序将转到行getAppropriatePMStyleId(office, folderForStyle);
并抛出空指针。该方法仅在应用程序的一个位置调用,因此我不认为它是从外部再次调用的。是否有一些我不理解的Java行为?
答案 0 :(得分:2)
在if
块中,您进行递归调用,但不对其返回的内容执行任何操作。您最终return id;
,但id
已初始化为null
。
也许您打算返回递归调用返回的内容:
id = getAppropriatePMStyleId(office, folderForStyle);
以便return id;
返回正确的ID。