Передача аргумента String параметру метода Object в Groovy - PullRequest
0 голосов
/ 27 апреля 2018

Недавно меня попросили решить странную ошибку в 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 принимает String в качестве первого аргумента и Object в качестве второго аргумента. Очевидно, что исходный код является правильным (по крайней мере, в Java), поскольку String также является объектом, поэтому подпись метода setAttribute (java.lang.String, java.lang.Object) должна быть действительной.

В чем может быть причина ошибки? Можно ли передавать аргументы подкласса в параметры метода суперкласса в Groovy?

Кроме того, я заметил, что сигнатуры одного и того же метода повторяются несколько раз. В Java невозможно иметь две одинаковые сигнатуры метода. Почему подписи нескольких методов появляются в сообщении об ошибке?

1 Ответ

0 голосов
/ 29 апреля 2018

работает следующий код:

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

Проблема решена, но я приму любой ответ, который объясняет, почему это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...