Groovy中向Object类型方法参数传String参数报错排查
搞定Groovy中
setAttribute()的参数不匹配异常 嘿,先看你遇到的报错信息,其实已经把问题说得很直白了:
No signature of method: oracle.apps.scm.doo.common.extensions.Line.setAttribute() is applicable for argument types: (java.lang.String, java.lang.String) values: [OrderedQuantity, 59] Possible solutions: setAttribute(java.lang.String, java.lang.Object), setAttribute(java.l...
核心问题就是:你给setAttribute()的第二个参数传了字符串,但OrderedQuantity这个字段是数值类型(比如Integer)——虽然方法签名写的是接受Object,但字段本身的类型约束不允许传字符串。
再看你的代码,这里有两个明显的小问题:
int OQ = line.getAttribute("OrderedQuantity"); line.setAttribute("OrderedQuantity", OQ.toString(OQ+50));
toString()的用法完全错了:Integer的toString()要么是静态方法Integer.toString(数值),要么是调用数值对象的toString(),你写成OQ.toString(OQ+50)根本不符合语法;- 完全没必要转字符串!
OrderedQuantity存的是数字,直接传计算后的整数就好。
正确的写法超简单
直接把计算后的整数传入方法:
int OQ = line.getAttribute("OrderedQuantity"); line.setAttribute("OrderedQuantity", OQ + 50);
给你加个健壮性优化(可选)
如果怕getAttribute()返回的不是Integer(比如null或者其他类型),可以加个校验,避免后续出意外:
def orderedQty = line.getAttribute("OrderedQuantity"); if (orderedQty instanceof Integer) { line.setAttribute("OrderedQuantity", orderedQty + 50); } else { // 这里可以抛异常或者打日志,比如: throw new IllegalArgumentException("OrderedQuantity不是预期的整数类型:${orderedQty}"); }
这样改完,参数类型就完美匹配了,异常自然就消失啦。
内容的提问来源于stack exchange,提问作者Ashish K
相关产品推荐
相关产品推荐

