这是因为无法从包含匿名类的包外部访问匿名类。
这是一个幕后发生的演示:
public static void main(String[] args) throws Exception { Portal portal = new Portal(); Object list = portal.getClass().getDeclaredMethod("getActionList", null).invoke(portal, null); Object action = list.getClass().getDeclaredMethod("get", new Class[] { int.class }).invoke(list, 0); action.getClass().getDeclaredMethod("action", null).invoke(action, null);}尝试在与
Portal类相同的程序包中执行此操作,然后在该程序包之外的另一个类中再次执行。在另一个包中,最后一行将引发完全相同的异常。因为EL基于反射,所以这就是EL努力解决的问题。
除了创建
public(inner)之外,我没有其他更好的解决方法
class。反射(以及EL)也可以从其他包中访问它们。
public class Portal { private List<IAction> list = new ArrayList<IAction>(); public Portal() { list.add(new IActionImpl()); } public class IActionImpl implements IAction { public void action() { System.out.println("called action here"); } } public List<IAction> getActionList() { return list; }}


