• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GOF本のStrategyのJava版での質問です。)

NullPointerExceptionが発生する理由とは?

このQ&Aのポイント
  • GOF本のStrategyのJava版での質問です。クラスCompositionのbreakCountの関数を実行した所で、NullPointerExceptionが発生してしまいます。
  • NullPointerExceptionの理由は、SimpleCompositorのcomposeの戻り値を1と期待していますが、実際にはnullが返ってきています。
  • 原因として、_compositor変数が初期化されていないため、composeメソッドが実行されず、nullが返ってしまっている可能性が考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

_compositorをインスタンス化してないのでnullで当然です。No.1さんも同様のことを言っていると思います。 Mainクラスで >new Composition(new SimpleCompositor()) としていますが、CompositionクラスのコンストラクタでCompositorはどこにも設定してません。 ここで_compositorに代入するんじゃないのですか? なんだか前回の質問と同じような内容な気が・・・

tmiyoshi
質問者

補足

すいません。 _compositorを実装クラスでオーバーライドする所が抜けていました。 public Composition(Compositor c) { _compositor = c; // ... } すいません。。。書き方の問題で、見落としていました。 以後、気をつけます。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ざっと見ただけなんだけど, compositor ってどこで値を入れてるの?

tmiyoshi
質問者

補足

Compositorは抽象クラス(Compositprクラスのcomposeも抽象関数)でnewできないので、実際の実装は、SimpleCompositorクラスで行っています。 Mainクラスの Composition quick = new Composition(new SimpleCompositor()); のnew SimpleCompositor()がそれです。

関連するQ&A