我有一個問題,它代表了我的興趣。假設我有這樣的類定義:如果傳遞給jsp頁面,內部類的實例會發生什麼
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工作正常,但出於無法訪問的內部公共方法GetName()根據JSTL的等級。
爲什麼你只是不運行代碼和觀察者會發生什麼? –
我觀察發生了什麼。服務器說該元素沒有可讀屬性「getName」 –