0

我继承了一些编译时出错的代码。我收到以下两个错误之一:一个是return声明丢失,另一个是我的//throw不匹配trycatch这个错误似乎return声明的位置有关,我整个上午都在移动。它目前的位置让步error: missing return statement。被注释掉的任何一个返回都会产生一条消息,我必须trycatch我的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。谁能告诉我最合适的退货地点并解释原因?

4

5 回答 5

4

Instead of

try {
    List<File> result = new ArrayList<File>();

do

List<File> result = new ArrayList<File>();
try {

this way the variable result will not be out of scope after the try/catch block.

The list will contain every element added up to until the exception occurred.

于 2013-02-19T16:07:17.053 回答
3

你的方法必须总是返回,要么正常,要么发出异常。

如果您的catch子句没有抛出Exception,您需要一个return语句作为 catch 的最后一个语句,或者在 catch 之后。

当你想在你的 try 块之外返回一些东西时,它的值必须在你进入 try之前定义。

例如,如果你想在 try 中返回一些值(以防一切顺利),如果你得到一个异常返回 null,你的代码看起来像这样:

try{
   ... do loads of stuff
   return value;
} catch(Exception e) {
    e.printStackTrace(); //log it, whatever
    return null;
}
于 2013-02-19T16:08:25.797 回答
2

You are defining result inside your try block, but (trying to) return it outside of the block. This won't work because the variable is then out of scope. The simplest way to fix this is to declare the result variable outside of the try block.

于 2013-02-19T16:07:20.273 回答
1

result is in try block, and it could be not-initialized. Taking it outside of the try block will solve your problem.

于 2013-02-19T16:07:22.497 回答
1

首先,您尝试访问result在块中声明的变量,try并且在其中不可见。

于 2013-02-19T16:08:12.093 回答