คำถามติดแท็ก try-with-resources

8
สำนวนที่ถูกต้องสำหรับการจัดการทรัพยากรที่ถูกผูกมัดในลองกับทรัพยากร
ไวยากรณ์ของJava 7 try-with-resources (หรือที่รู้จักในชื่อ ARM block ( การจัดการทรัพยากรอัตโนมัติ )) เป็นสิ่งที่ดีสั้นและตรงไปตรงมาเมื่อใช้AutoCloseableทรัพยากรเพียงแหล่งเดียว อย่างไรก็ตามฉันไม่แน่ใจว่าสำนวนที่ถูกต้องคืออะไรเมื่อฉันต้องการประกาศหลาย ๆ ทรัพยากรที่ต้องพึ่งพาซึ่งกันและกันตัวอย่างเช่น a FileWriterและ a BufferedWriterที่ล้อมรอบ แน่นอนว่าคำถามนี้เกี่ยวข้องกับกรณีใด ๆ เมื่อAutoCloseableมีการห่อทรัพยากรไม่เฉพาะชั้นเรียนเฉพาะสองแห่งนี้ ฉันมากับทางเลือกทั้งสามต่อไปนี้: 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 } } …

4
ลองกับทรัพยากรใน Kotlin
เมื่อฉันพยายามเขียนเทียบเท่า Java tryโค้ด -with-resourcesใน Kotlin มันไม่ได้ผลสำหรับฉัน ฉันลองรูปแบบต่าง ๆ ต่อไปนี้: try (writer = OutputStreamWriter(r.getOutputStream())) { // ... } แต่ก็ไม่ได้ผล ไม่มีใครรู้ว่าสิ่งที่ควรใช้แทน? เห็นได้ชัดว่า Kotlin ไวยากรณ์ไม่ได้มีความหมายสำหรับการสร้างดังกล่าว แต่บางทีฉันอาจจะขาดอะไรบางอย่าง มันกำหนดไวยากรณ์สำหรับลองบล็อกดังนี้: try : "try" block catchBlock* finallyBlock?;

5
ฉันควรใช้ลองกับทรัพยากรกับ JDBC อย่างไร
ฉันมีวิธีรับผู้ใช้จากฐานข้อมูลด้วย 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(); } …

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)); …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.