- ベストアンサー
エンクロージングインスタンス
いつも参考にさせて頂いています。 表題の件なのですが、ソースで説明しないと質問しずらいのでソースで質問させて頂きます。 ********************************* 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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
現在のJavaはクロージャ関係にはあまり強くないんですね。 (今後のJDKでついに変わるようですが) ご質問の点ですが、内部クラス(BBB)のインスタンスを作るには その前に外部クラス(つまりエンクロージャ) (AAA)のインスタンスが必要になります。 JSP内でということですので、きれいな書き方は考えなければなりませんが、 AAA aaa = new AAA(); aaa.new BBB(); で、BBBのインスタンスが作成されます。
その他の回答 (1)
- pcbeginner
- ベストアンサー率46% (261/560)
エンクロージングインスタンス ↓ http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000994.html 上記サイトとeclipseのメッセージをあわせると、 BBBクラスのインスタンスを作るためには必ずAAAクラスのインスタンス(BBBクラスに対するエンクロージングインスタンス)が必要なので、エンクロージングインスタンスを指定して下さい。 ということではないでしょうか?
お礼
お返事ありがとうございます。 私のソースでエンクロージングインスタンスを指定したとすると <% request.setAttribute("aaa", "new AAA.BBB() ")%> ってことでしょうか? 質問に質問で返して申し訳ないのですが宜しくお願いします