Thursday, February 24, 2011

Project Coin Examples with JDK 7 Developer Preview

Mark Reinhold announced availability of the first JDK 7 developer preview today. Reason enough for me to give some of the Project Coin features a shot. I won't get into details here, but instead just show some quick examples. Most of them are self-explanatory anyway.

Source code is also available via github.

Strings in switch

final String str = "foo";

switch (str) {
    case "foo":
        System.out.println("mooh");
        break;
    case "bar":
        System.out.println("miau");
        break;
    default:
        break;
}

Binary integral literals and underscores in numeric literals

final int large = 1_000_000;
System.out.println(large);
   
final int binary = 0b1011;
System.out.println(binary);

Multi-catch and more precise rethrow

class ExA extends Exception {}
class ExB extends Exception {}

public void testMultiCatch() {

    final int a = 0;
        
    try {
        if (a == 0) {
            throw new ExA();
        }
        if (a == 1) {
            throw new ExB();
        }
    } catch (ExA|ExB ex) {
        System.out.println(ex.getClass() + 
             " was thrown and caught");
    }

}

public void testReThrow() throws ExB {

    final int a = 0;

    try {
        if (a == 0) {
            throw new ExA();
        }
        if (a == 1) {
            throw new ExB();
        }
    } catch (final ExA exa) {
        System.out.println("Exa was caught");
    } catch (final Exception ex) {
        System.out.println(ex.getClass() + 
            " was thrown, caught and rethrown");
        throw ex;
    }

}

Improved type inference for generic instance creation (diamond)

final List<String> list = new ArrayList<>();
list.add("Foo");
        
System.out.println(list);

try-with-resources statement

try (final BufferedReader br = new BufferedReader(new FileReader("./TestAutomaticResourceManagement.java"))) {

   String line;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }

} catch (final IOException e) {
}