Code listings for "Project Coin: The Java Language Has Evolved! (Part 1)," Java Magazine, January/February 2012



Listing 1

private static void basicSwitch(int value) {

    switch (value) {            

        case 2:

            System.out.println("Number 2!");

        case 1:

        case 3:

            System.out.println("A number in the [1, 3] range: " + value);

            break;

        default:

            System.out.println("A number outside the [1, 3] range: " + value);

    }

}



Listing 2

static enum EmailTag { OTHER, INBOX, ACTION, HOLD, ARCHIVES, TRASH }



public static void enumSwitch(EmailTag tag) {

    switch (tag) {

        case ACTION:

        case HOLD:

            System.out.println("You need to take action on this email.");

            break;

        case INBOX:

            System.out.println("You need to classify this email.");

            break;

        default:

            System.out.println("Out of the GTD scope.");

    }

}



Listing 3

public static boolean isTrue(String str) {

    switch(str.trim().toUpperCase()) {

        case "OK":

        case "YES":

        case "TRUE":

            return true;

        case "KO":

        case "NO":

        case "FALSE":

            return false;

        default:

            throw new IllegalArgumentException("Not a valid true/false string.");

    }

}



Listing 4

public static boolean isTrue(String s) {

    String str = s.trim().toUpperCase();

    int jump = -1;

    switch(str.hashCode()) {

        case 2404:

            if (str.equals("KO")) { jump = 3; }

            break;

        case 2497:

            if (str.equals("NO")) { jump = 4; }

            break;

        case 2524:

            if (str.equals("OK")) { jump = 0; }

            break;

        case 87751:

            if (str.equals("YES")) { jump = 1; }

            break;

        case 2583950:

            if (str.equals("TRUE")) { jump = 2; }

            break;

        case 66658563:

            if (str.equals("FALSE")) { jump = 5; }

    }

    switch(jump) {

        case 0:

        case 1:

        case 2:

            return true;

        case 3:

        case 4:

        case 5:

            return false;

        default:

            throw new IllegalArgumentException("Not a valid true/false string.");

    }

}



Listing 5

List<String> strings = new LinkedList<String>();

strings.add("hello");

strings.add("world");



Map<String, List<String>> contacts = new HashMap<String, List<String>>();

contacts.put("Julien", new LinkedList<String>());

contacts.get("Julien").addAll(asList("Foo", "Bar", "Baz"));



Listing 6

List<String> strings = new LinkedList<>();

strings.add("hello");

strings.add("world");



Map<String, List<String>> contacts = new HashMap<>();

contacts.put("Julien", new LinkedList<String>());

contacts.get("Julien").addAll(asList("Foo", "Bar", "Baz"));



Listing 7

Diamond.java:43: error: cannot infer type arguments for HashMap;

        Map<String, String> dmap = new HashMap<>() {

                                              ^

  reason: cannot use '<>' with anonymous inner classes

1 error



Listing 8

$ javap Diamond\$2

Compiled from "Diamond.java"

final class Diamond$2 extends Diamond$SomeClass<java.lang.String> {

  Diamond$2();

}



Listing 9

SomeClass<?> barInner = new SomeClass<>() { };



Diamond.java:60: error: cannot infer type arguments for SomeClass;

        SomeClass<?> barInner = new SomeClass<>() { };

                                             ^

  reason: cannot use '<>' with anonymous inner classes

1 error



Copyright 2012, Oracle Corporation