代码之家  ›  专栏  ›  技术社区  ›  Ashish K

在Groovy中将字符串参数传递给对象方法参数

  •  1
  • Ashish K  · 技术社区  · 6 年前

    最近,我被要求解决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中,不可能有两个相同的方法签名。为什么错误消息中会出现多个方法签名?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ashish K    6 年前

    以下代码工作:

    def OQ = line.getAttribute("OrderedQuantity") + 50;
    line.setAttribute("OrderedQuantity", OQ);
    

    这个问题已经解决了,但我会接受任何人的答案,解释为什么它会起作用。