Java 若传递给jsp页面,内部类的实例会发生什么情况

Java 若传递给jsp页面,内部类的实例会发生什么情况,java,inner-classes,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>

我有一个问题,代表我的兴趣。假设我有这样一个类定义:

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);      
  }
}
public类A扩展了动作{
公共B级{
//内部类定义
公共字符串getName(){return“Class B”;}
}
@凌驾
public void execute(HttpServletRequest请求){
ArrayList=新建ArrayList();
添加(新的B());
//这里我添加了更多的元素
setAttribute(“列表”,列表);
}
}
似乎编译器并不禁止这样的代码。因此,我将内部类的实例列表传递给HttpServletRequest实例。但是,当我试图在JSP中访问它们的公共方法时,我收到了这样一个投诉:这样的读取方法(例如getName)并不存在。虽然物体本身似乎存在

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

Upd: 以下是使用内部类实例列表的jsp页面片段:

<c:forEach var = "element" items = "${list}">
  <c:out value = "${element.name}"/><br/>
</c:forEach>



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

如果没有
A
实例的上下文,则
B
的实例不可能存在。如果您有一个对
B
实例的引用,则该对象隐式地有一个对封闭的
a
实例的引用,即使您没有直接引用。

为什么不运行代码,然后观察会发生什么?我观察会发生什么。服务器说元素没有可读属性“getName”,因此,如果我将B的实例列表传递给JSP,它就无法访问它们了?好的,你的回答解释了很多,谢谢