をログには、次のクラス定義を考えてみましょう。クラスC
のオブジェクトを作成する素晴らしい作品Logulaは匿名クラスのインスタンス上で
:
new C()
と予想される出力生成:
INFO [2012-03-31 19:16:14,261] C: from A
INFO [2012-03-31 19:16:14,263] C: from C
しかし
new A() {}
の匿名のサブクラスのインスタンスを作成します
はNullPointerException
を返します。
Exception in thread "main" java.lang.NullPointerException
at com.codahale.logula.Log$.clean(Log.scala:25)
at com.codahale.logula.Log$.forName(Log.scala:23)
at com.codahale.logula.Log$.forClass(Log.scala:18)
at com.codahale.logula.Logging$class.log(Logging.scala:172)
at A.log(LoggingTraitTest.scala:3)
at A.<init>(LoggingTraitTest.scala:3)
at LoggingTraitTest$$anon$1.<init>(LoggingTraitTest.scala:8)
at LoggingTraitTest$delayedInit$body.apply(LoggingTraitTest.scala:8)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30)
at scala.App$class.main(App.scala:60)
at LoggingTraitTest$.main(LoggingTraitTest.scala:6)
at LoggingTraitTest.main(LoggingTraitTest.scala)
C
の匿名サブクラスがインスタンス化されている場合と同様の例外がスローされます。new C() {}
なぜここに明示し、匿名クラスのインスタンス化の間に違いがありますか?
私は何が起こっているのかを知るためのヒントは歓迎されるでしょう。前もって感謝します!
私はあなた自身のlogula loggerであることも簡単に分かりました。 'A'クラスの' lazy override val log = Log.forClass(classOf [A]) 'は' A'のすべての匿名インスタンスを使用しますロガー解決名としての 'A'クラス。 –