У меня есть переменная, объявленная как тип Object a, которая на самом деле ссылается на экземпляр типа A.
Object a
A
. В EL я могу напрямую использовать следующее выражение для печати свойства name типа A:
name
${a.name}
Как это работает?
EL использует отражение под капотами, обычно через javax.beans.Introspector API .
javax.beans.Introspector
Это то, что он примерно делает под прикрытием на ${a.name}.
// EL will breakdown the expression. String base = "a"; String property = "name"; // Then EL will find the object and getter and invoke it. Object object = pageContext.findAttribute(base); String getter = "get" + property.substring(0, 1).toUpperCase() + property.substring(1); Method method = object.getClass().getMethod(getter, new Class[0]); Object result = method.invoke(object); // Now EL will print it (only when not null). out.println(result);
Он не преобразует / не преобразует тип.
Это потому, что name является свойством объекта a, и, вероятно, объект также является JavaBean (не путать с Enterprise JavaBean).
a
См. здесь для документации по языку Expression и здесь для краткого учебника.