3

考虑库的ExpressionEvaluator类的一个简单用例Janino,即当使用它来猜测表达式的参数时,如下所示:

public static String[] getParameters(String expression) { // Suppress exceptions
    try {
        return ExpressionEvaluator.guessParameterNames(
                new Scanner(null, new StringReader(expression)));
    } catch (Exception e) {
    }

    return null;
}

虽然以上对于我使用过的任何类型的表达式(包括一些非常晦涩的表达式)都非常有效(100%),但如果任何参数以大写字母开头,则将其省略。

例如,表达式

aVar + Another

aVar如果传递给上述方法,将只产生 1 个参数 ( ),而Another忽略另一个参数 ( )。

对这种行为有什么解释(例如,以大写字母开头的变量是否假定为类名)?

最重要的是,是否可以绕过所描述的行为(例如,通过某些配置选项)?


更新

显然,限制更普遍,影响所有以大写字母开头的参数。这是一个已知的 Janino 限制(或功能),如JANINO-151中所述并在相关讨论中提到。

事实上, Janino ExpressionEvaluator 类guessParameterNames()的方法的源代码证实了这一点。

4

0 回答 0