精华帖 (3) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-25
函数不能重载,所以将函数参数变成Object时,出现----参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double
|
|
返回顶楼 | |
发表时间:2009-08-25
lovit 写道 函数不能重载,所以将函数参数变成Object时,出现----参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double
你把函数的参数声明成Object,那么参数就是用Object传入就好了。重载的时候,null型没法处理啊,不知道转成啥 |
|
返回顶楼 | |
发表时间:2009-08-25
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
|
|
返回顶楼 | |
发表时间:2009-08-25
lovit 写道 我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
你传入double的时候,变量申明为啥类型啊? |
|
返回顶楼 | |
发表时间:2009-09-03
linliangyi2007 写道 lovit 写道 我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
你传入double的时候,变量申明为啥类型啊? 是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。 function void dd(Object a,Object b){ } double c=0.0; double d=1.0; dd(c,d) |
|
返回顶楼 | |
发表时间:2009-09-03
lovit 写道 linliangyi2007 写道 lovit 写道 我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
你传入double的时候,变量申明为啥类型啊? 是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。 function void dd(Object a,Object b){ } double c=0.0; double d=1.0; dd(c,d) 是的,你必须把变量声明称Object跟你在函数声明的时候一致。我不知道你的“正常代码这个语法应该是支持”是啥意思,IK-Exp只是一个很轻量级的解析器,它有自己的语法,并不兼容某种语言的,如果你觉得要支持JS或者Java的全部语法,那就期望太高了。你可以看看IK-Exp的项目定位和说明吧。 |
|
返回顶楼 | |
发表时间:2009-09-05
linliangyi2007 写道 lovit 写道 linliangyi2007 写道 lovit 写道 我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
你传入double的时候,变量申明为啥类型啊? 是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。 function void dd(Object a,Object b){ } double c=0.0; double d=1.0; dd(c,d) 是的,你必须把变量声明称Object跟你在函数声明的时候一致。我不知道你的“正常代码这个语法应该是支持”是啥意思,IK-Exp只是一个很轻量级的解析器,它有自己的语法,并不兼容某种语言的,如果你觉得要支持JS或者Java的全部语法,那就期望太高了。你可以看看IK-Exp的项目定位和说明吧。 我的意思是,在eclipse的JAVA环境下,语法检查和编译都可以通过。其实这个功能比较实用,因为在流程条件判断方面,很难确定这个值是整形或浮点形(因为每个单据的业务数据不同),而IK-Exp又不支持重载,如果当IK-Exp要调用的函数参数为Object类型能支持的话,那就太好了,不知道这个功能能不能实现,谢谢! |
|
返回顶楼 | |
发表时间:2009-09-05
最后修改:2009-09-05
引用 我的意思是,在eclipse的JAVA环境下,语法检查和编译都可以通过。其实这个功能比较实用,因为在流程条件判断方面,很难确定这个值是整形或浮点形(因为每个单据的业务数据不同),而IK-Exp又不支持重载,如果当IK-Exp要调用的函数参数为Object类型能支持的话,那就太好了,不知道这个功能能不能实现,谢谢! 不是太明白你的意思,个人觉得你没有很细的看IK-Exp的API文档。不多说了,这个给一个Object为参数的例子吧: 1.定义自己的Java方法 /** * @author linly * */ public class TestFunctions { /** * 自己定义的以Object为参数的Java方法 * @param o * @return */ public String sayHello(Object o){ if(o instanceof Integer){ return "Integer"; }else if(o instanceof Double){ return "Double"; }else{ return "Float"; } } } 2.设置IKExpression.cfg.xml,将自定义的方法声明为IK-Exp的函数 <?xml version="1.0" encoding="UTF-8"?> <function-configuration> <!-- 这里省略IK-Exp的内置函数配置罗干。。。--> <!-- 用户函数配置 请在这里定制您自己的函数--> <bean class="org.wltea.expression.test.TestFunctions"> <function name="问好" method="sayHello"> <parameter-type>java.lang.Object</parameter-type> </function> </bean> </function-configuration> 3.在Java中调用的自己写的函数,实现Object的参数传入 public static void main(String[] args){ //定义表达式 String expression = "$问好(数字类型)"; //给表达式中的变量 [数字类型] 付上下文的值 List<Variable> variables = new ArrayList<Variable>(); variables.add(new Variable("数字类型" , DataType.DATATYPE_OBJECT , new Integer(100))); //执行表达式 Object result = ExpressionEvaluator.evaluate(expression, variables); System.out.println("Result = " + result); //变更 [数字类型] 的值 variables.add(new Variable("数字类型" , DataType.DATATYPE_OBJECT , new Double(100))); //再次执行表达式 result = ExpressionEvaluator.evaluate(expression, variables); System.out.println("Result = " + result); } 4.执行结果 Result = Integer Result = Double OK!!! |
|
返回顶楼 | |
发表时间:2009-09-05
谢谢您的回答,
我们是以下方法去调用的,会出错。。 public static void main(String[] args){ Object result = null; result = ExpressionEvaluator.evaluate("sayHello(1.0)"); System.out.println("Result = " + result); result = ExpressionEvaluator.evaluate("sayHello(1)"); System.out.println("Result = " + result); } 以上如“sayHello(1.0)”是在流程中的表达式。您的意思是只能通过楼上的方式去调用吗?因为sayHello中的值,是根据数据库中的数据或上下文的中值取得,配置表达式的时候,根本不知道他是什么类型,只知道他是数字(可能是整形,也可能是浮点型) |
|
返回顶楼 | |
发表时间:2009-09-05
最后修改:2009-09-05
lovit 写道 谢谢您的回答,
我们是以下方法去调用的,会出错。。 public static void main(String[] args){ Object result = null; result = ExpressionEvaluator.evaluate("sayHello(1.0)"); System.out.println("Result = " + result); result = ExpressionEvaluator.evaluate("sayHello(1)"); System.out.println("Result = " + result); } 以上如“sayHello(1.0)”是在流程中的表达式。您的意思是只能通过楼上的方式去调用吗?因为sayHello中的值,是根据数据库中的数据或上下文的中值取得,配置表达式的时候,根本不知道他是什么类型,只知道他是数字(可能是整形,也可能是浮点型) 马上发布修定版本,谢谢你的建议。 |
|
返回顶楼 | |