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
非常好用~
有参考价值就点个赞呗~