getEnclosingなんちゃら。
LoggingAPIを使っている皆様におかれましては、ガード節をキチンと記述しておりますでしょうか?
こういうやつですね。
if(LOG.isDebugEnabled()) { LOG.debug("hogehoge"); }
毎回記述するのが面倒な上に、コードの見栄えがあまりよろしくありません。
ガード節を書かないと、実行時におかれましては、
最終的にはどこにも出力されない巨大な文字列が、
不思議空間に浮かんでは消え、浮かんでは消えるなどしているかもしれません。
というワケで、コンパイラにガード節を記述して貰えば良いんじゃね?的な事を考えてみた。
public static void main(String[] args) throws Exception { assert debug(new a() { public boolean b() { // assert する為の真偽値を演算しる。 return true; } }, "hoge"); } public static boolean debug(a a, String msg) { Class<?> aclazz = a.getClass(); Class<?> clazz = aclazz.getEnclosingClass(); Method m = aclazz.getEnclosingMethod(); System.out.printf("%s - %s [%s]\n", clazz, m, msg); return a.b(); } public interface a { boolean b(); }
ここで登場するのが、getEnclosingなんちゃら。
StackTraceElement的な何かを作らなくても、呼出し元が分かるんだーぜーとか。
コードの綺麗さがどうこうって話は無かった事に…orz