有没有理由更喜欢ClassName.class' over' this.getClass()'获取类对象的实例?

时间:2016-05-03 19:22:59

标签: java

在我的工作中查看一些Java代码时,我注意到当我们在每个类中初始化日志框架时,我们有类似的东西:

private final Logger log = Logger.getLogger(Foo.class);

这让我想到了,有没有理由我们使用Foo.class而不是:

private final Logger log = Logger.getLogger(this.getClass());

这只是一种偏好,还是有理由偏爱另一种?

编辑:最初代码片段引用了静态成员,显然不会编译。

1 个答案:

答案 0 :(得分:2)

忽略关于静态上下文的一点(这是完全正确的 - 让我们假设你在这些初始化器中的表达式被转移到实例方法中) - 使用this.getClass()的方法在调用时会有非常不同的结果一个子类!

如果你想要Foo的类对象,请始终使用第一个版本。

如果你想要调用者的类(Foo的子类),请使用第二个版本。