Critique of Cardinal Direction Enum
Conceptually it is a great solution. I can suggest some changes, but in reality they are minor. It would also be 'fun' to tune it  abit, but in the bigger picture the changes would be miniscule... still...

My biggest observation is that the constructors can be simplified a lot. Instead of having each Enum member create a unique method implementation (and that method builds a String each time - though the compiler will probably fix that), you could simplify it a lot with:

private final int degrees;
private final String message;

private Direction(final int degrees, final String name) {
    this.degrees = degrees;
    this.message = degrees + " degrees due " + name;
}

public int getDegrees() {
    return degrees;
}

public String getMessage() {
    return message;
}


With the change to the constructor, you have:


no abstract methods to implement
simple message which is a constant, instead of re-creating it each time you call getMessage()
Your enums are initialized in a simpler way:

NORTH(0, "North"),
EAST(90, "East"),
SOUTH(180, "South"),
WEST(270, "West")



Apart from this, the code is pretty good, but, there is a way you can 'play' with the lookup system to use the ordinals only.... consider the following code (I'll leave it to you to figure out.... ;-):

public static Direction get(final int degrees) {
    int ordinal = ((degrees % 360) / 90) - ( 4 * (degrees % 90));
    return ordinal &lt; 0 ?  null : values()[ordinal];
}