是否可以在静态上下文中确定实现类的类。鉴于我想在超类中创建一个记录器,它在实现类的类名下记录它的消息。
目前我正在尝试使用这种方法:
public abstract class GenericDao<T, ID extends Serializable>
{
protected static Logger logger = Logger.getLogger(new Object() { }.getClass().getEnclosingClass());
...
}
但我还是得到了超类。有没有办法做到这一点,或者当我有权访问“this”时,我应该放弃并在实际的日志记录方法中包含该类。
答案 0 :(得分:0)
在这种情况下,静态变量和方法始终属于声明类GenericDao
。如果您创建了一个新的子类SpecificDao
,那么它在访问它时不会访问新的logger副本,它正在访问与GenericDao
中完全相同的记录器。
您需要将Logger创建为非静态成员,并且每个对象都有一个(可能非常低效),或者在每个类中声明记录器。
如果您在getLogger()
中使用抽象方法GenericDao
而根本没有Logger
,那么应该为您提供所需的内容是什么。
每当它想要记录GenericDao
来电时getLogger().log
然后,实现类定义自己的私有静态Logger记录器。它们重写getLogger()抽象方法并从中返回静态方法。