You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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));
  1. toString()的用法完全错了:Integer的toString()要么是静态方法Integer.toString(数值),要么是调用数值对象的toString(),你写成OQ.toString(OQ+50)根本不符合语法;
  2. 完全没必要转字符串!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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:56:05