Jun 28, 2016
A generic fail method
I’m a fan of expressing this
if (conditionA) {
return a;
} else if (conditionB) {
return b;
} else if (conditionC) {
return c;
} else {
return null;
}
like this
return conditionA ? a
: conditionB ? b
: conditionC ? c
: null;
But sometimes the last part actually looks like
...
} else {
throw new AssertionError("Unexpected condition");
}
in which case you can’t directly translate the whole thing to a conditional expression, since this doesn’t compile:
...
: throw new AssertionError("Unexpected condition");
Here’s where this little utility method comes in handy:
public static <R, T extends Throwable> R fail(T t) throws T {
throw t;
}
which allows you to write
return conditionA ? a
: conditionB ? b
: conditionC ? c
: fail(new AssertionError("Unexpected condition");
The generic return type ensures that the method always fits in as an expression. Unfortunately JUnits Assert.fail
doesn’t follow this pattern!