{"id":1636,"date":"2012-12-29T07:06:29","date_gmt":"2012-12-29T05:06:29","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=1636"},"modified":"2012-12-29T07:06:29","modified_gmt":"2012-12-29T05:06:29","slug":"nicht-autocloseable-typen-in-try-mit-ressourcen-mithilfe-von-lambda-ausdrcken-bzw-methoden-referenzen-nutzen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2012\/12\/nicht-autocloseable-typen-in-try-mit-ressourcen-mithilfe-von-lambda-ausdrcken-bzw-methoden-referenzen-nutzen\/","title":{"rendered":"Nicht AutoCloseable-Typen in try-mit-Ressourcen mithilfe von Lambda-Ausdr&uuml;cken bzw. Methoden-Referenzen nutzen"},"content":{"rendered":"<p>Es ist mit einem Trick m\u00f6glich, auch Exemplare in einem try mit Ressourcen zu nutzen, die nicht vom Typ AutoCloseable sind. Ein Lambda-Ausdruck bzw. eine Methoden-Referenz l\u00e4sst sich einsetzen, um eine beliebige Methode als close()-Methode einzusetzen. Ein ReentrantLock zum Beispiel ist eine Implementierung eines Lock, um bei nebenl\u00e4ufigen Zugriffen einen Bereich abzuschlie\u00dfen. lock() beginnt den Bereich, unlock() gibt ihn wieder frei. Das unlock() l\u00e4sst sich \u00fcber einen Lambda-Ausdruck als close()-Methoden verkaufen.<\/p>\n<p>ReentrantLock lock = new ReentrantLock();<\/p>\n<p>try ( AutoCloseable unlock = lock::unlock ) { \/\/ oder () -&gt; {lock.unlock();}<\/p>\n<p>&#160; lock.lock();<\/p>\n<p>}<\/p>\n<p>System.out.println( lock.isLocked() ); \/\/ false<\/p>\n<p>Ob dieser \u201eTrick\u201c sinnvoll ist oder nicht, ist eine andere Frage. Das try mit Ressourcen setzt auf jeden Fall das unlock() in einen internen finally-Block, der \u00fcber die Konstruktion eingespart wird. Allerdings wird \u00fcblicherweise die Ressource im try mit Ressourcen Block auch erst deklariert, was hier vorher gemacht werden muss, au\u00dferdem ist die Variable unlock unn\u00fctz. Daher ist die Relevanz eher niedrig.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es ist mit einem Trick m\u00f6glich, auch Exemplare in einem try mit Ressourcen zu nutzen, die nicht vom Typ AutoCloseable sind. Ein Lambda-Ausdruck bzw. eine Methoden-Referenz l\u00e4sst sich einsetzen, um eine beliebige Methode als close()-Methode einzusetzen. Ein ReentrantLock zum Beispiel ist eine Implementierung eines Lock, um bei nebenl\u00e4ufigen Zugriffen einen Bereich abzuschlie\u00dfen. lock() beginnt den [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,66],"tags":[],"class_list":["post-1636","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1636"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1636\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}