0

假设我在层次结构中的所有类都只有默认构造函数,那么创建 Log 实例有什么问题,如下所示?

 public abstract class AbstractService {


    protected static Log log=null;


    public AbstractService(){
        log=LogFactory.getLog(this.getClass().getName());
    }

    public void foo(){      
        log.debug("base foo() : ");
    }

}


class ServiceA extends AbstractService {    

    public void foo(){
        super.foo();

        log.debug("Overloaded foo() in ServiceA");      
    }
}


class ServiceB extends AbstractService {
    public void foo(){
        super.foo();
        log.debug("Overloaded foo() in ServiceB");      

    }
} 
4

1 回答 1

3

鉴于“log”字段是静态的(即与 AbstractService 类相关联),它不应从构造函数(与该类的特定实例相关联)中设置。

您要么需要:

  • 使“日志”字段非静态(可能是您想要的,因为您使用 getClass().getName() 对其进行命名),或者
  • 在其声明中对其进行初始化,例如 protected static Log log=LogFactory.getLog(AbstractClass.class);
于 2012-10-30T03:28:07.847 回答