繁体   English   中英

MVEL表达式评估期间出现“参数类型不匹配”

[英]Getting “argument type mismatch” during MVEL expression evaluation

对于以下代码段,我得到了错误“参数类型不匹配”。 如果我使用注释行,则可以正常工作。

有人可以解释这种现象的原因吗?

有没有办法让我自己评估第一个表达式?

VariableResolverFactory functionFactory = new MapVariableResolverFactory();    
Object value = MVEL.eval("def StringValueWithLength(str) { int myLen = str.toString().length(); return String.valueOf(str) + \":\" + myLen; }; StringValueWithLength(\"qwert\");", functionFactory);
//Object value = MVEL.eval("def StringValueWithLength(str) { return String.valueOf(str) + \":\" + str.toString().length(); }; StringValueWithLength(\"qwert\");", functionFactory);
System.out.println("Value : " + value);

似乎是MVEL中的错误/限制,我调试了MVEL代码。

MVEL错误地检测到return语句中的参数类型,它实际上是一个String但检测为int

public static java.lang.String java.lang.String.valueOf(int)

为了表达

Object value = MVEL.eval("def StringValueWithLength(str) { int myLen = str.toString().length(); return String.valueOf(str) + \":\" + myLen; }; StringValueWithLength(\"qwert\");", functionFactory);

并抛出

Caused by: java.lang.IllegalArgumentException: argument type mismatch.

下面的表达式按预期工作

String expr = "def StringValueWithLength(str) { int myLen = str.length(); return String.valueOf(str) + \":\" + myLen; }; StringValueWithLength(\"qwert\");"; // removed toString

要么

String expr = "def StringValueWithLength(str) { int myLen = str.toString().length(); return str + \":\" + myLen; }; StringValueWithLength(\"qwert\");"; // removed String.valueOf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM