Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇语;“自我”;(静态)参考_Java_Static_Scope_Self - Fatal编程技术网

Java 爪哇语;“自我”;(静态)参考

Java 爪哇语;“自我”;(静态)参考,java,static,scope,self,Java,Static,Scope,Self,我正在寻找JAVA中以静态上下文方式对当前类的“自”引用,如 解决方案:突破范围?注意,这与静态定义相比非常慢(乘以系数300): 传统的方法是: static Logger LOG = LoggerFactory.getLogger(<Classname>.class.getName()); static Logger LOG=LoggerFactory.getLogger(.class.getName()); 还有其他选择吗?我正在寻找一种将记录器定义放入抽象类的方法。记录器

我正在寻找JAVA中以静态上下文方式对当前类的“自”引用,如

解决方案:突破范围?注意,这与静态定义相比非常慢(乘以系数300):

传统的方法是:

static Logger LOG = LoggerFactory.getLogger(<Classname>.class.getName());
static Logger LOG=LoggerFactory.getLogger(.class.getName());

还有其他选择吗?我正在寻找一种将记录器定义放入抽象类的方法。记录器应自行确定调用它的类。

您不应继承记录器。只需在每个类中声明logger


但是,如果你不想做这样有用的思考,就不要把它变成静态的)

我不认为有任何替代方案与你的问题中的两个有显著不同

您可以创建以下帮助器方法:

public static String getCallingClassname() {
    return new RuntimeException().getStackTrace()[1].getClassName();
}
然后

static Logger LOG = LoggerFactory.getLogger(Helper.getCallingClassname());
但这和原版一样昂贵。(FWIW-300倍的速度可能不是主要问题,除非您有数千个这样的记录器。每个静态都只初始化一次…)

我个人更喜欢用“老式”的方式来做这件事。

稍微快一点

static final Logger LOG = LoggerFactory.getLogger(
       Thread.currentThread().getStackTrace()[0].getClassName());

如果这样做1000次,使用Class.Class.getName()需要36毫秒,这样做需要60毫秒。也许不值得担心太多

您不需要使用任何这些。我发现使用起来很方便:
//记录器

私有静态最终记录器Logger=LoggerFactory.getLogger(CreateEmployeeRecord.class或this.class)

在每个需要日志记录的类中执行此操作,并将括号中的类名更改为使用它的相应类

static final Logger LOG = LoggerFactory.getLogger(
       Thread.currentThread().getStackTrace()[0].getClassName());