2012-01-15 8 views
1

次のメソッドからStringを返そうとしています。try/catch文でStringを返すにはどうすればよいですか?

public String openCon() { 
    try { 
     Scanner scan = new Scanner(System.in); 
     URL sitex = new URL("http://" + scan.nextLine()); 
     URLConnection connection = sitex.openConnection(); 
     Object content = sitex.getContent(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(sitex.openStream())); 
     String str; 
     String x = "1"; 
     while ((str = in.readLine()) != null) { 
      x += str; 
     } 
     in.close(); 
     return x; 

    } 
    catch(Exception e) { 
     System.out.println(e); 
    } 
} 
+2

問題は何ですか? – talnicolas

答えて

13

問題がtryブロックから戻っていません - 問題は、例外がスローされた場合は何も返していないことです。あなたは例外をキャッチしていますが、何も返さずにメソッドの最後に到達します。より専門的な用語で説明すると、非voidメソッドの終わりには到達できません。

個人的には、私はcatchブロックを完全に削除し、throws宣言を追加します。体。あなたは実際にを処理しているわけではありません。例外を印刷して無視しているだけです。これはまれには良い考えではありません。キャッチExceptionは、通常、まずはかなり悪い考えです。彼らも例外の場合には閉じているので、余談として

、あなたはfinallyブロックであなたのBufferedReaderURLConnection値を閉じる必要があります。また、固定のエンコーディング名をInputStreamReaderに渡すか、レスポンスのcontent-typeヘッダーを使用する上位レベルのHTTPクライアントAPIを使用することをお勧めします。ああ、ループ内の文字列連結の代わりにStringBuilderを使用してください。

+0

あなたは私たちの残りの部分をコメントすることはあまりありません:-) – Robin

1

return文の前に例外がある場合、このメソッドは何も返しません。あなたが実際に例外を処理しているわけではないので、私はそれをバブルアップさせ、より高いレベルで処理することをお勧めします。これは、より良い場所がない場合、主な方法かもしれません。メソッドをthrows IOExceptionと宣言し、おそらく他の例外クラスを追加する必要があります。

また、インスタンス(BufferedReaderおよびInputStreamReader)が正しく閉じられるように、try-with-resourcesを使用してください。

1

tryステートメントの前に変数を初期化し、その後ろにreturnステートメントを配置してみませんか?

0

次の例のように、catchブロックで何かを返す必要があります:

catch(Exception e) { 
     System.out.println(e); 
     return ""; 
    } 
0

用途:

String result = "" 
try{ 
    result = "OK"; 
}catch (Exception e){ 
    result = e.toString(); 
}finally{ 
    return result; 
} 
関連する問題