0

コンパイル時にエラーになるコードを継承しました。2つのエラーのいずれかが発生します。1つはreturnステートメントが欠落していること、もう1つは不一致の//throwです。このエラーは、私が午前中ずっと動き回っていたステートメントの位置に関連しているようです。その現在の位置はをもたらします。コメントアウトされたリターンのいずれかは、またはを宣言する必要があるというメッセージを生成します。trycatchreturnerror: missing return statementtrycatchthrow

検討:

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

それ以外の

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

行う

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

このようにして、ブロックresult後に変数がスコープ外になることはありません。try/catch

リストには、例外が発生するまでに追加されたすべての要素が含まれます。

于 2013-02-19T16:07:17.053 に答える
3

メソッドは、通常、または例外を発行することにより、ALWAYSを返す必要があります。

catch句が。をスローしない場合は、catchの最後のステートメントとして、またはcatchの後にステートメントExceptionが必要です。return

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

tryブロック内で定義resultしていますが、(しようとして)ブロック外に返します。変数がスコープ外になるため、これは機能しません。これを修正する最も簡単な方法は、tryブロックの外で結果変数を宣言することです。

于 2013-02-19T16:07:20.273 に答える
1

resultはtryブロックにあり、初期化されていない可能性があります。tryブロックの外に出すと、問題が解決します。

于 2013-02-19T16:07:22.497 に答える
1

まず第一に、ブロックでresult宣言さtryれ、そこからは見えない変数にアクセスしようとしています。

于 2013-02-19T16:08:12.093 に答える