The more precise rethrow is a tricky one to understand. See if you can spot what the new feature is in the example below. Will it compile on pre-java-7? If not how would it need to be changed to compile on pre-java-7? The answers lie after the example.
On Java 6 compiling the above gives the following exception.
This can be fixed for Java 6 by changing:
to:
So now you see the improvement that Java 7 offers with this feature. You can be more precise in the declaration of the exceptions that you rethrow. Very nice indeed.
public class MorePreciseExceptionRethrow {
static class Exception1 extends Exception {}
static class Exception2 extends Exception {}
public static void main(String[] args) throws Exception1, Exception2 {
try {
boolean test = true;
if (test) {
throw new Exception1();
} else {
throw new Exception2();
}
} catch (Exception e) {
throw e;
}
}
}
On Java 6 compiling the above gives the following exception.
Foo.java:18: unreported exception java.lang.Exception; must be caught or declared to be thrown
throw e;
^
1 error
This can be fixed for Java 6 by changing:
public static void main(String[] args) throws Exception1, Exception2 {
to:
public static void main(String[] args) throws Exception {{
So now you see the improvement that Java 7 offers with this feature. You can be more precise in the declaration of the exceptions that you rethrow. Very nice indeed.
great
ReplyDelete