我有一个超级课程:
public abstract class BasicDAO implements DAO{
private static final Logger log = LoggerFactory.getLogger(BasicDAO.class);
protected DBCollection Collection;
@Override
public DBCursor findByAll() {
DBCursor cursor = Collection.find();
log.debug("do something");
return cursor;
}
}
我扩展了这个超类:
public class TopicBasicDAO extends BasicDAO{
private static final Logger log = LoggerFactory.getLogger(TopicBasicDAO.class);
}
我想将成员变量日志更改为子类,但它不能覆盖该成员。我该怎么办?
答案 0 :(得分:1)
如评论所示,您无法覆盖静态成员。我建议一个替代方案。您的层次结构中的每个类似乎都需要不同的记录器实例。这可以使用Map来处理。
private static Map<Class,Logger> loggers = new HashMap<Class,Logger>();
....
public Logger getLogger ()
{
Logger logger = null;
if (BasicDAO.loggers.containsKey(this.getClass())) {
logger = BasicDAO.loggers.get(this.getClass());
} else {
logger = LoggerFactory.getLogger(this.getClass());
BasicDAO.loggers.put (this.getClass(), logger);
}
return logger;
}
然后,您不是直接访问记录器,而是编写getLogger().debug("do something");
答案 1 :(得分:0)
使日志变量受保护而不是超类中的final,然后在您的子类中可以修改它, 即在超类中:
protected static Logger log = LoggerFactory.getLogger(BasicDAO.class);
并在子类中:
public class TopicBasicDAO extends BasicDAO{
log = LoggerFactory.getLogger(TopicBasicDAO.class);
}