在Java静态方法声明中使用当前类

前端之家收集整理的这篇文章主要介绍了在Java静态方法声明中使用当前类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的 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();
    ...
}

并且您可以将相同的声明复制并粘贴到所有类中,没有任何问题.

猜你在找的Java相关文章