タグ付けされた質問 「try-with-resources」

8
try-with-resourcesブロックで複数のチェーンされたリソースを管理するためのイディオムを修正しますか?
Java 7のtry-with-resources構文(ARMブロック(自動リソース管理)とも呼ばれます)は、AutoCloseableリソースを1つだけ使用する場合に便利で短く、簡単です。ただし、相互に依存する複数のリソースを宣言する必要がある場合、たとえばa FileWriterとa BufferedWriterをラップすることで、正しいイディオムが何であるかわかりません。もちろん、この質問は、AutoCloseableこれら2つの特定のクラスだけでなく、いくつかのリソースがラップされた場合のすべてのケースに関係します。 私は次の3つの選択肢を思いつきました。 1) 私が見た単純なイディオムは、ARM管理変数で最上位のラッパーのみを宣言することです。 static void printToFile1(String text, File file) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { bw.write(text); } catch (IOException ex) { // handle ex } } これは素晴らしくて短いですが、壊れています。基になるFileWriter変数で宣言されていないため、生成されたfinallyブロックで直接閉じられることはありません。closeラッピングの方法でのみ閉じられBufferedWriterます。問題は、bwのコンストラクタから例外がスローされた場合、その例外がclose呼び出されないため、基にFileWriter なるものが閉じられないことです。 2) static void printToFile2(String text, File file) { try (FileWriter fw = new FileWriter(file); BufferedWriter …

5
JDBCでtry-with-resourcesを使用するにはどうすればよいですか?
JDBCを使用してデータベースからユーザーを取得する方法があります。 public List<User> getUser(int userId) { String sql = "SELECT id, name FROM users WHERE id = ?"; List<User> users = new ArrayList<User>(); try { Connection con = DriverManager.getConnection(myConnectionURL); PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, userId); ResultSet rs = ps.executeQuery(); while(rs.next()) { users.add(new User(rs.getInt("id"), rs.getString("name"))); } rs.close(); ps.close(); con.close(); } catch …

4
Kotlinでのリソースの試用
tryKotlinでJava -with-resourcesコードに相当するコードを記述しようとしたところ、うまくいきませんでした。 次のさまざまなバリエーションを試しました。 try (writer = OutputStreamWriter(r.getOutputStream())) { // ... } しかしどちらも機能しません。 誰かが代わりに何を使うべきか知っていますか?どうやらKotlin文法にはそのような構成の定義がありませんが、おそらく何かが足りません。これは、tryブロックの文法を次のように定義します。 try : "try" block catchBlock* finallyBlock?;

2
Java 7のtry-with-resourcesを正しく使用していますか
バッファリーダーとファイルリーダーが閉じ、例外がスローされた場合にリソースが解放されることを期待しています。 public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException { try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { return read(br); } } ただし、catch閉鎖を成功させるための条項を設ける必要はありますか? 編集: 基本的に、Java 7の上記のコードは、Java 6の以下のコードと同等です。 public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException { BufferedReader br = null; try { br = new BufferedReader(new FileReader(filePath)); return read(br); } …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.