我有一个问题,这对我很感兴趣。假设我有这样的类定义:
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)不存在的事实。虽然物体本身似乎存在。
这是什么意思?内部类甚至不能隐含地传递给外界?或者他们的生命会立即结束,因为外部类实例会停止存在?或者除了外部类之外,没有人可以访问内部类的公共方法。
UPD: 这是jsp页面的片段,它使用内部类的实例列表:
<c:forEach var = "element" items = "${list}">
<c:out value = "${element.name}"/><br/>
</c:forEach>
似乎forEach工作正常,但是根据JSTL,out无法访问内部类的公共方法getName()。
答案 0 :(得分:5)
如果没有B
实例的上下文,A
的实例就不可能存在。如果您引用了B
的实例,则该对象隐式地引用了封闭的A
实例,即使您没有直接引用该实例。