This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 496312a20747fd779eca049aa264fdbb1d40685e
Author: Daniel Sun <sun...@apache.org>
AuthorDate: Wed Jan 15 14:46:20 2020 +0800

    Add docs for try-with-resources
---
 src/spec/doc/core-semantics.adoc | 57 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/src/spec/doc/core-semantics.adoc b/src/spec/doc/core-semantics.adoc
index f6ac125..bfcc72c 100644
--- a/src/spec/doc/core-semantics.adoc
+++ b/src/spec/doc/core-semantics.adoc
@@ -288,6 +288,63 @@ try {
 }
 ----
 
+==== ARM Try with resources
+
+Groovy often provides better alternatives to Java 7's `try`-with-resources 
statement for Automatic Resource Management (ARM).
+That syntax is now supported for Java programmers migrating to Groovy and 
still wanting to use the old style:
+
+[source,groovy]
+--------------------------------------
+class FromResource extends ByteArrayInputStream {
+    @Override
+    void close() throws IOException {
+        super.close()
+        println "FromResource closing"
+    }
+
+    FromResource(String input) {
+        super(input.toLowerCase().bytes)
+    }
+}
+
+class ToResource extends ByteArrayOutputStream {
+    @Override
+    void close() throws IOException {
+        super.close()
+        println "ToResource closing"
+    }
+}
+
+def wrestle(s) {
+    try (
+            FromResource from = new FromResource(s)
+            ToResource to = new ToResource()
+    ) {
+        to << from
+        return to.toString()
+    }
+}
+
+def wrestle2(s) {
+    FromResource from = new FromResource(s)
+    try (from; ToResource to = new ToResource()) { // Enhanced 
try-with-resources in Java 9+
+        to << from
+        return to.toString()
+    }
+}
+
+assert wrestle("ARM was here!").contains('arm')
+assert wrestle2("ARM was here!").contains('arm')
+--------------------------------------
+Which yields the following output:
+--------------------------------------
+ToResource closing
+FromResource closing
+ToResource closing
+FromResource closing
+--------------------------------------
+
+
 === Power assertion
 
 Unlike Java with which Groovy shares the `assert` keyword, the latter in 
Groovy behaves very differently. First of all,

Reply via email to