Вы выбрали особенно плохой пример.+=
в некотором смысле является частью String
.См. Этот комментарий в Javadoc для java.lang.String
:
. Язык Java обеспечивает специальную поддержку оператора конкатенации строк (+
) и преобразования других объектов в строки.
Вам придется поискать Спецификацию языка Java , чтобы найти больше информации об этом (15.18.1).Но, опять же, Scala не является Java, поэтому +
также является частью спецификации языка Scala (12.3.1).
До сих пор я говорил о +
,не +=
.Тем не менее, Scala имеет специальный синтаксический сахар для назначения.Как описано в разделе 6.12.4, за исключением <=
, >=
, !=
и операторов, начинающихся с =
, любой символ оператора (см. «Символы оператора» в главе 1), заканчивающийся знаком равенства, будетбыть переосмысленным, если он не существует как метод.В частности,
x += 1
будет интерпретироваться как
x = x + 1
Это произойдет независимо от того, является ли x
var
, поэтому иногда можно увидеть сообщение об ошибке "reassignment to val
".
Итак, как вы можете видеть, +=
действительно является частью String
, за исключением исключения в спецификации Java, которое было реплицировано в спецификации Scala, плюс немного синтаксического сахара.
Это не означает, что в java.lang.String
нет методов, которые можно использовать с неявными преобразованиями.Однако я оставлю это другим ответам.На вашем месте я бы изменил метод в вопросе, чтобы он был правильным.Кроме того, +=
невозможно найти в переполнении стека.