日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 8:Lambda表达式与自动关闭

發布時間:2023/12/3 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8:Lambda表达式与自动关闭 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果您通過Neo4j的Java API和Java 6使用了Neo4j的早期版本,則可能具有與以下類似的代碼,以確保在事務中進行寫操作:

public class StylesOfTx {public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );Transaction tx = db.beginTx();try {db.createNode();tx.success();} finally {tx.close();}} }

在Neo4j 2.0中,Transaction開始擴展AutoCloseable ,這意味著您可以使用“嘗試使用資源”,并且在塊完成時將自動調用“ close”方法:

public class StylesOfTx {public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );try ( Transaction tx = db.beginTx() ){Node node = db.createNode();tx.success();}} }

盡管人們在不使用此語法的情況下仍可以在應用程序中掛起事務,但這仍然可以很好地工作,盡管仍然可以允許使用舊樣式。

在Venkat Subramaniam的Java 8書中,他提出了一種替代方法,其中我們使用基于lambda的方法:

public class StylesOfTx {public static void main( String[] args ) throws IOException{String path = "/tmp/tx-style-test";FileUtils.deleteRecursively(new File(path));GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( path );Db.withinTransaction(db, neo4jDb -> {Node node = neo4jDb.createNode();});}static class Db {public static void withinTransaction(GraphDatabaseService db, Consumer<GraphDatabaseService> fn) {try ( Transaction tx = db.beginTx() ){fn.accept(db);tx.success();}}} }

實際上,“ withinTransaction”函數將在GraphDatabaseService或類似數據庫上運行,而不是在該Db類上,但是對于此示例,將其放置在該函數上更容易。

這種風格的一個缺點是,您沒有對處理失敗案例的事務有明確的控制權–假設如果未調用'tx.success()',則事務失敗并將其回滾。 我不確定到底有多少用例真正需要這種細粒度的控制。

Brian Hurt將此稱為“ 中間模式的漏洞 ”,我想一旦Java 8發布并得到更廣泛的使用,我們將開始看到更多類似的代碼。

參考: Java 8:Lambda表達式與Auto Closeable可以從Mark Needham博客博客上的JCG合作伙伴 Mark Needham獲得。

翻譯自: https://www.javacodegeeks.com/2014/03/java-8-lambda-expressions-vs-auto-closeable.html

總結

以上是生活随笔為你收集整理的Java 8:Lambda表达式与自动关闭的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。