在我的工作中查看一些Java代码时,我注意到当我们在每个类中初始化日志框架时,我们有类似的东西:
private final Logger log = Logger.getLogger(Foo.class);
这让我想到了,有没有理由我们使用Foo.class
而不是:
private final Logger log = Logger.getLogger(this.getClass());
这只是一种偏好,还是有理由偏爱另一种?
编辑:最初代码片段引用了静态成员,显然不会编译。
答案 0 :(得分:2)
忽略关于静态上下文的一点(这是完全正确的 - 让我们假设你在这些初始化器中的表达式被转移到实例方法中) - 使用this.getClass()的方法在调用时会有非常不同的结果一个子类!
如果你想要Foo的类对象,请始终使用第一个版本。
如果你想要调用者的类(Foo的子类),请使用第二个版本。