閉包的使用可以確定資源被正确的關閉,比如周遊檔案的每一行可以使用下面的代碼:
<code>1</code>
<code>new</code> <code>File(</code><code>"foo.txt"</code><code>).</code><code>eachLine</code> <code>{ line -> </code><code>println</code><code>(line) }</code>
如果在某些情況下,println()方法抛出了異常,那麼eachLine()方法将確定資源被正确的關閉,同樣的,如果在讀取的時候發生了異常,那麼資源也将會被正确的關閉。
如果你希望使用在reader/writer object或者input/output stream object的時候,有一些輔助方法來幫助你處理資源的關閉,那麼這個時候你可以使用閉包。他将自動的在異常發生的時候關閉所有的資源,比如下面的代碼:
<code>def</code> <code>count</code><code>=</code><code>0</code><code>, MAXSIZE=</code><code>100</code>
<code>2</code>
<code>new</code> <code>File(</code><code>"foo.txt"</code><code>).</code><code>withReader</code> <code>{ reader -></code>
<code>3</code>
<code> </code><code>while</code> <code>(reader.</code><code>readLine</code><code>() != </code><code>null</code><code>) {</code>
<code>4</code>
<code> </code><code>if</code> <code>(++</code><code>count</code> <code>> MAXSIZE) </code><code>throw</code> <code>new</code> <code>RuntimeException(</code><code>'File too large!'</code><code>)</code>
<code>5</code>
<code> </code><code>}</code>
<code>6</code>
<code>}</code>
以及:
<code>def</code> <code>fields = [</code><code>"a"</code><code>:</code><code>"1"</code><code>, </code><code>"b"</code><code>:</code><code>"2"</code><code>, </code><code>"c"</code><code>:</code><code>"3"</code><code>]</code>
<code>new</code> <code>File(</code><code>"foo.ini"</code><code>).</code><code>withWriter</code> <code>{ out -></code>
<code> </code><code>fields.</code><code>each</code><code>() { key, value -></code>
<code> </code><code>out.</code><code>writeLine</code><code>(</code><code>"${key}=${value}"</code><code>)</code>
Further Information
==============================================================================
本文轉自被遺忘的部落格園部落格,原文連結:http://www.cnblogs.com/rollenholt/p/3349057.html,如需轉載請自行聯系原作者