// this syntax should be removed... static O getThreadLocal(O o, S name) { ThreadLocal t = cast getOpt(o, name); ret t != null ? t.get() : null; } static A getThreadLocal(ThreadLocal tl) { ret tl == null ? null : tl!; } static A getThreadLocal(ThreadLocal tl, A defaultValue) { ret or(getThreadLocal(tl), defaultValue); }