14.09.2021, 13:23 | #1 |
Участник
|
toString(), гад, опасный. ax2012
Привет всем.
Выяснилась страшная вещь. Если на табличке перекрыт метод toString то при вызове на соответствующем treeNode метода toString() X++: treeNode.toString() Цитата:
Ошибка времени выполнения: TreeNode (источник данных), метод toString вызван с недопустимыми параметрами.
Стал исследовать вопрос, оказывается вызов super() внутри табличного toString() возвращает Common ! Но при этом IDE считает что тип должен быть str и генерит такой код X++: public str toString() { str ret; ret = super(); return ret; } X++: ret = super(); X++: public Common toString() { Common ret; ; ret = super(); return ret; } X++: ret = super(); Если написать X++: public anytype toString() { anytype ret; ; ret = super(); return ret; } Это конечно помогает при использовании в коде X++: buffer.toString() X++: treeNode.toString() В общем, похоже что что-то там недоработано в ядре а на таблицах toString метод лучше не перекрывать. Во избежание так сказать... Причем это не только тут вот еще пример ClassFactory - queryRunClass и еще Использование modifiedFieldValue() и modifiedField(). Как правильно. Ax2012. Типы операндов не совместимы с оператором Это все из той же серии когда где то в ядре при передаче параметров что-то ломается. Т.е. для разработчиков в 2012-й Аксапте обращение с типами сделали более строгим, но в ядре немного недосмотрели, а может уже не стали менять старые баги. |
|
|
За это сообщение автора поблагодарили: mazzy (5), sukhanchik (5), gl00mie (5), -DocSerzh- (1), S.Kuskov (5). |
Теги |
ax2012, ax2012r3, debug, tostring, баг |
|
|