• ベストアンサー

エンクロージングインスタンス

いつも参考にさせて頂いています。 表題の件なのですが、ソースで説明しないと質問しずらいのでソースで質問させて頂きます。 ********************************* public class AAA { public class BBB { Map map = new HashMap(); public BBB() { map.put("key", obj); } public Map getMap() { return map; } } } 以下JSP内にて--------------------------------- <% request.setAttribute("aaa", "new BBB() ")%> ************************************************** とクラスBのコンストラクタを呼び、リクエストスコープに入れようとすると、怒られてしまいました。 eclipse上ではエンクロージングインスタンスを指定てくださいと言ったメッセージが表示されたので、google等でも調べて見てみたのですがいまいちピンときません。 エンクロージングインスタンスとはどういうことなのでしょうか? うまく上記のソース上でリクエストスコープにMapのオブジェクトを格納したいと思っています。 どうか宜しくお願いします。 ■開発環境■ Eclipse 3.1.0 jdk1.4.12 struts1.2.9

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

  • ベストアンサー
  • sire
  • ベストアンサー率62% (22/35)
回答No.2

現在のJavaはクロージャ関係にはあまり強くないんですね。 (今後のJDKでついに変わるようですが) ご質問の点ですが、内部クラス(BBB)のインスタンスを作るには その前に外部クラス(つまりエンクロージャ) (AAA)のインスタンスが必要になります。 JSP内でということですので、きれいな書き方は考えなければなりませんが、 AAA aaa = new AAA(); aaa.new BBB(); で、BBBのインスタンスが作成されます。

その他の回答 (1)

回答No.1

エンクロージングインスタンス ↓ http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000994.html 上記サイトとeclipseのメッセージをあわせると、 BBBクラスのインスタンスを作るためには必ずAAAクラスのインスタンス(BBBクラスに対するエンクロージングインスタンス)が必要なので、エンクロージングインスタンスを指定して下さい。 ということではないでしょうか?

pgBeginImo
質問者

お礼

お返事ありがとうございます。 私のソースでエンクロージングインスタンスを指定したとすると <% request.setAttribute("aaa", "new AAA.BBB() ")%> ってことでしょうか? 質問に質問で返して申し訳ないのですが宜しくお願いします

関連するQ&A