|
Lombok - v0.10.8 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |
@Target(value=LOCAL_VARIABLE) @Retention(value=SOURCE) public @interface Cleanup
Ensures the variable declaration that you annotate will be cleaned up by calling its close method, regardless of what happens. Implemented by wrapping all statements following the local variable declaration to the end of your scope into a try block that, as a finally action, closes the resource.
Example:
public void copyFile(String in, String out) throws IOException { @Cleanup FileInputStream inStream = new FileInputStream(in); @Cleanup FileOutputStream outStream = new FileOutputStream(out); byte[] b = new byte[65536]; while (true) { int r = inStream.read(b); if (r == -1) break; outStream.write(b, 0, r); } }Will generate:
public void copyFile(String in, String out) throws IOException { @Cleanup FileInputStream inStream = new FileInputStream(in); try { @Cleanup FileOutputStream outStream = new FileOutputStream(out); try { byte[] b = new byte[65536]; while (true) { int r = inStream.read(b); if (r == -1) break; outStream.write(b, 0, r); } } finally { out.close(); } } finally { in.close(); } }Note that the final close method call, if it throws an exception, will overwrite any exception thrown in the main body of the generated try block. You should NOT rely on this behaviour - future versions of lombok intend to silently swallow any exception thrown by the cleanup method _IF the main body throws an exception as well, as the earlier exception is usually far more useful.
However, in java 1.6, generating the code to do this is prohibitively complicated.
Optional Element Summary | |
---|---|
String |
value
The name of the method that cleans up the resource. |
public abstract String value
|
Lombok - v0.10.8 | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |