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

「ログ」フィールドが静的 (つまり、AbstractService クラスに関連付けられている) であるため、コンストラクター (そのクラスの特定のインスタンスに関連付けられている) から設定しないでください。

次のいずれかが必要です。

  • 「ログ」フィールドを非静的にする (getClass().getName() を使用して名前を付けていることを考えると、おそらく意図したとおりです)、または
  • 宣言内で初期化します。たとえば、 protected static Log log=LogFactory.getLog(AbstractClass.class);
于 2012-10-30T03:28:07.847 に答える