私が興味を持っている質問があります。次のようなクラス定義があるとします。
public class A extends DumbAction{
public class B {
// Inner class definition
public String getName() {return "Class B";}
}
@Override
public void execute(HttpServletRequest request) {
ArrayList<B> list = new ArrayList<B>();
list.add(new B());
// Here I add some more elements
request.setAttribute("list", list);
}
}
コンパイラはそのようなコードを禁止していないようです。したがって、内部クラスのインスタンスのリストを HttpServletRequest インスタンスに渡します。しかし、その後、JSP でそれらのパブリック メソッドにアクセスしようとすると、そのような読み取りメソッド (getName など) が存在しないという事実について苦情が寄せられます。オブジェクト自体は存在しているように見えますが。
どういう意味ですか?内部クラスは暗黙的にも外部の世界に渡すことができないということですか? それとも、外部クラスのインスタンスが存在しなくなると、その寿命はすぐに終わりますか? または、外側のクラスを除いて、内側のクラスの public メソッドにもアクセスできません。
Upd: これは、内部クラスのインスタンスのリストを使用する jsp ページのフラグメントです。
<c:forEach var = "element" items = "${list}">
<c:out value = "${element.name}"/><br/>
</c:forEach>
forEach は正常に動作しているように見えますが、JSTL によると、out は内部クラスの public メソッド getName() にアクセスできません。