最近,我被要求解决Groovy中的一个奇怪错误。代码如下所示:
int OQ = line.getAttribute("OrderedQuantity");
line.setAttribute("OrderedQuantity", OQ.toString(OQ+50));
错误消息如下所示:
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.lang.String, java.lang.Object), getAttribute(java.lang.String), getAttribute(java.lang.String), getAttribute(java.lang.String). (DOO-2685874)
来自Java背景的我发现这很令人困惑。相反,在Java中,我们会执行以下操作:
line.setAttribute("OrderedQuantity", Integer.toString(OQ+50));
但是,我在Groovy控制台中测试了以下代码,它似乎可以工作:
int x = 5;
print x.toString(x+2);â
输出为
7
这是正确的。
错误消息中的“可能的解决方案”表明setAttribute方法接受字符串作为第一个参数,接受对象作为第二个参数。显然,原始代码是正确的(至少在Java中是正确的),因为String也是一个对象,所以setAttribute(Java.lang.String,Java.lang.Object)方法签名应该是有效的。
错误的原因可能是什么?在Groovy中,子类参数可以传递给超类方法参数吗?
另一方面,我注意到相同的方法签名重复了多次。在Java中,不可能有两个相同的方法签名。为什么错误消息中会出现多个方法签名?