- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GOF本のStrategyのJava版での質問です。)
NullPointerExceptionが発生する理由とは?
このQ&Aのポイント
- GOF本のStrategyのJava版での質問です。クラスCompositionのbreakCountの関数を実行した所で、NullPointerExceptionが発生してしまいます。
- NullPointerExceptionの理由は、SimpleCompositorのcomposeの戻り値を1と期待していますが、実際にはnullが返ってきています。
- 原因として、_compositor変数が初期化されていないため、composeメソッドが実行されず、nullが返ってしまっている可能性が考えられます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
_compositorをインスタンス化してないのでnullで当然です。No.1さんも同様のことを言っていると思います。 Mainクラスで >new Composition(new SimpleCompositor()) としていますが、CompositionクラスのコンストラクタでCompositorはどこにも設定してません。 ここで_compositorに代入するんじゃないのですか? なんだか前回の質問と同じような内容な気が・・・
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
ざっと見ただけなんだけど, compositor ってどこで値を入れてるの?
質問者
補足
Compositorは抽象クラス(Compositprクラスのcomposeも抽象関数)でnewできないので、実際の実装は、SimpleCompositorクラスで行っています。 Mainクラスの Composition quick = new Composition(new SimpleCompositor()); のnew SimpleCompositor()がそれです。
補足
すいません。 _compositorを実装クラスでオーバーライドする所が抜けていました。 public Composition(Compositor c) { _compositor = c; // ... } すいません。。。書き方の問題で、見落としていました。 以後、気をつけます。 ありがとうございました。