Slide 20
Slide 20 text
20
guardWithTest() + empty()
private static boolean isDebug(Level l) {
return l == Level.DEBUG || l == Level.TRACE;
}
var mh = lookup.findVirtual(PrintStream.class, "println",
methodType(void.class, String.class));
mh = mh.bindTo(System.err);
mh = MethodHandles.dropArguments(mh, 0, Level.class);
var test = lookup.findStatic(Logger.class, "isDebug",
methodType(boolean.class, Level.class));
var empty = MethodHandles.empty(
methodType(void.class, Level.class, String.class));
var guard = MethodHandles.guardWithTest(test, mh, empty);
guard.invokeExact(Level.WARNING, "warning !");
guard.invokeExact(Level.DEBUG, "debug !");