为什么getClass()不能用作静态方法?
在静态上下文中,为什么不能调用的静态版本getClass()
(而不是必须使用my.package.name.MyClassName.class
)?
编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗?
注意:
我并不是说static getClass()
应该使用a 而不 是非静态方法getClass()
(这很明显-
如果SpecialFoo
是的子类Foo
,则a的getClass()
of
Foo
可能返回Foo.class
或SpecialFoo.class
其他,必须在运行时确定)。
我是说我想知道为什么没有 两个
版本getClass()
,一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法getClass()
。如果不可能,那就不可能了,那就是答案。如果有可能,但还没有完成,那就是历史选择,也许有充分的理由。这就是我想知道的。
最好宣布
final static Logger logger = LoggerFactory.getLogger(getClass());
代替
final static Logger logger = LoggerFactory.getLogger(my.package.name.MyClass.class);
前者可以逐字逐句地从一个类复制到下一个类,而后者则需要您在每个文件中复制类名称。
回答:
如果没有其他原因,则因为同时拥有方法的版本static
和非static
版本的方法是不合法的(可能是因为不鼓励static
在非static
上下文中调用方法是合法的)。
我也觉得这样的方法虽然在定义记录器或其他内容的上下文中很有用,但在其他上下文中(例如从实例方法中调用时)可能会造成混淆。
以上是 为什么getClass()不能用作静态方法? 的全部内容, 来源链接: utcz.com/qa/413404.html