我想调用类的静态方法,而不在JEXL的上下文中放置任何对象。
对于实例方法,我们将一个对象放到MapContext中并使用该键来调用该方法。但就我而言,我没有任何背景。 ${person.howYouDoing()}
我不想使用person对象放入上下文中。
答案 0 :(得分:0)
来自文档:
ns:function一个JexlEngine可以注册用作的对象或类 函数命名空间。这可以允许表达式: 数学:余弦(23.0)
https://commons.apache.org/proper/commons-jexl/reference/syntax.html
所以你必须在JexlEngine上注册一个班级
答案 1 :(得分:0)
在https://issues.apache.org/jira/browse/JEXL-140上对此进行了很好的讨论,作为JEXL的改进。
提出此要求的人提出了一种解决方案,将负担加在了JEXL程序员身上。它仅创建String来获取String类,该类仅用于查找所需的类。
${''.class.forName('person').howYouDoing()}
...假定“人”在默认软件包中。这可用于为没有公共构造函数的类(例如Pattern)调用静态构造函数:
${''.class.forName('java.util.regex.Pattern').compile('\\d{2}-(\\w{3})-\\d{2}')}
顺便说一下,JEXL开发人员建议将JexlContext
子类化,以始终返回存在的任何类。这比要求模板编写者进行''.class.forName()
黑客操作更为优雅,但是由于您不想修改MapContext
,因此可能无法满足您的问题。它还会污染所有类的上下文。
答案 2 :(得分:-1)
从任何地方调用静态方法都没有问题。检查是否已导入静态方法的类,它位于类路径中。