RT:
某些业务想动态取 Java 对象的方法,有多种方式,我这里分享一种SharedMethod扩展get方法。
上 石马:
public class TemplateFn{ /** * 动态取Java对象的方法 * @param obj Java对象 * @param column 方法名,优先遵循javabean规范 * @return 返回值 */ public Object get(Object obj, String column){ try { try { return obj.getClass().getDeclaredMethod( "get" + StrKit.firstCharToUpperCase(column)) .invoke(obj); } catch (NoSuchMethodException e) { return obj.getClass().getDeclaredMethod(column) .invoke(obj); } } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); } } }
配置:https://jfinal.com/doc/6-7
public void configEngine(Engine me) { me.addSharedMethod(new TemplateFn()); ...
使用:
#(get(Java对象, "方法名"))
测试:
public class TplKit { public String getName(){ return "myName"; } public static void main(String[] args) { Kv data = Kv.create(); TplKit k = new TplKit(); data.set("k", k); data.set("key", "name"); String s = "#(get(k, key))"; Engine use = Engine.use(); use.addSharedMethod(new TemplateFn()); Template template = use.getTemplateByString(s); String str = template.renderToString(data); System.out.println(str); } }
结果:
如果想类对象也是动态的,参考另一篇分享:https://jfinal.com/share/2625
非常好用~
有参考价值就点个赞呗~