考虑库的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()
的方法的源代码证实了这一点。