我在编译时继承了一些错误的代码。我收到了两个错误之一:一个是return
语句丢失,另一个错误throw
/ try
/ catch
。此错误似乎与return
语句的位置相关,我一直在整个上午移动。它的当前位置产生error: missing return statement
。被注释掉的任何一个返回都会产生一条消息,我必须使用try
声明catch
或throw
。
考虑:
static private List<File> getFileListingNoSort(File aDirectory) throws FileNotFoundException {
try {
List<File> result = new ArrayList<File>();
File[] filesAndDirs = aDirectory.listFiles();
List<File> filesDirs = Arrays.asList(filesAndDirs);
for(File file : filesDirs) {
result.add(file); //always add, even if directory
if ( ! file.isFile() ) {
List<File> deeperList = getFileListingNoSort(file);
result.addAll(deeperList);
// return result;
} //close if
// return result;
} // close for
} // close try for getFileListingNoSort
// return result;
catch (Exception exp) {
System.err.println("Error: " + exp.getMessage());
} //close catch getFileListingNoSort
return result;
} //close method
我会认为返回将在尝试之后,但在捕获之前。但是,这对我不起作用。我不确定为什么我会得到这些区域,除了误解程序如何与try
/ catch
一起流动。有人能告诉我最适合回归的地方并解释原因吗?
答案 0 :(得分:4)
而不是
try {
List<File> result = new ArrayList<File>();
DO
List<File> result = new ArrayList<File>();
try {
这样,变量result
在try/catch
阻止后不会超出范围。
该列表将包含在异常发生之前添加的所有元素。
答案 1 :(得分:3)
您的方法必须正常返回ALWAYS,或者发出异常。
如果你的catch
子句没有抛出Exception
,你需要一个return
语句作为catch的最后一个语句,或者在catch之后。
当您想要在try块之外返回某些内容时,必须先在中定义,然后才能进行尝试。
例如,如果你想在try中返回一些值(如果一切顺利的话),如果你得到一个Exception就返回null,你的代码看起来像这样:
try{
... do loads of stuff
return value;
} catch(Exception e) {
e.printStackTrace(); //log it, whatever
return null;
}
答案 2 :(得分:2)
您在try块中定义result
,但(尝试)将其返回到块之外。这不会起作用,因为变量超出了范围。解决此问题的最简单方法是在try块之外声明结果变量。
答案 3 :(得分:1)
result
在try块中,可能未初始化。将它放在try块之外可以解决你的问题。
答案 4 :(得分:1)
首先,您尝试访问result
块中声明的try
变量,并且不会显示该变量。