如果传递给jsp页面,内部类的实例会发生什么

SPI*_*984 4 java inner-classes

我有一个问题,这对我来说很有意义.假设我有这样一个类定义:

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);      
  }
}
Run Code Online (Sandbox Code Playgroud)

似乎编译器不禁止这样的代码.因此,我向HttpServletRequest实例传递了一个内部类实例列表.但是,然后我尝试在JSP中访问他们的公共方法,我抱怨这样的读取方法(例如,getName)不存在的事实.虽然物体本身似乎存在.

这是什么意思?内部类甚至不能隐含地传递给外界?或者他们的生命会立即结束,因为外部类实例会停止存在?或者除了外部类之外,没有人可以访问内部类的公共方法.

Upd:这是jsp页面的片段,它使用内部类的实例列表:

<c:forEach var = "element" items = "${list}">
  <c:out value = "${element.name}"/><br/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

似乎forEach工作正常,但是根据JSTL out不能访问内部类的公共方法getName().

Boh*_*ian 5

B没有实例的上下文就不能存在的实例A.如果您具有对实例的引用B,则该对象隐式地具有对封闭A实例的引用,即使您不直接引用该实例也是如此.