我的
Java生锈了,所以请忍受我.在C我可以做:
int someFunc(void) { printf("I'm in %s\n",__func__); }
在Java中,我可以按照当前正在定义的类型的名称或类进行词法.例如,如果我有:
import org.apache.log4j.Logger; class myClass { private static final Logger logger = Logger.getLogger(myClass.class); ... }
在getLogger()参数中重复“myClass”似乎是错误的.我想要“getLogger(__ CLASS__)”或“getLogger(this.class)”或某事. (我知道这两个都是愚蠢的,但他们应该指向我正在寻找的东西.)Java编译器在处理源代码时真的不知道什么类别?
解决方法
不幸的是,如果你处于一个静态的上下文(就像你在这里),没有更简单的方法.如果记录器是一个实例变量,可以使用getClass(),但是您将不得不担心子类.
对于这种特殊情况,替代方案是使用log5j. log5j是围绕log4j的包装器,其方便方法如getLogger(),通过走栈来推断正确的类.所以你的代码将成为:
import com.spinn3r.log5j.Logger; class myClass { private static final Logger logger = Logger.getLogger(); ... }
并且您可以将相同的声明复制并粘贴到所有类中,没有任何问题.