4

私が興味を持っている質問があります。次のようなクラス定義があるとします。

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() にアクセスできません。

4

1 に答える 1

5

のインスタンスはB、のインスタンスのコンテキストなしでは存在できませんA。のインスタンスへの参照がある場合、直接参照していなくてもB、そのオブジェクトはそれを囲むAインスタンスへの参照を暗黙的に持っています。

于 2012-06-09T09:24:10.143 に答える