Для некоторых классов в моем проекте я переопределяю toString() метод. Главным образом цель - улучшить читаемость журналов. Это означает, что такие строки не локализованы и никогда не должны отображаться в пользовательском интерфейсе. Кроме того, я обеспокоен тем, что вместо него будет вызываться неявный toString(), например. когда он сериализуется (используя некоторую стороннюю библиотеку).Можно ли перечислить все случаи, когда неявный toString() вызывается для моего класса?
Есть ли способ перечислить все случаи, когда вызывается toString()? Лучше, иметь это только для классов в моей упаковке или иным образом фильтровать тривиальные случаи, например log("index=" + index)
? Или запретить неявное toString() для определенных классов в моем проекте?
Мой проект фактически использует Java 7 и скомпилирован для Android. В настоящее время я использую Eclipse (ADT), и у меня включен анализ Lint. Но я открыт для переключения инструментов и сред.
Что было бы неправильно с переопределением 'toString()' для всех классов, которые вы создали и записывали в журнал каждый раз при вызове? –
Я думаю, вы могли бы начать с JDT AST, чтобы найти инфиксные выражения, содержащие оператор плюс. Оттуда вы можете использовать реализацию компилятора jdt java, чтобы определить, является ли выражение infix конкатенацией строк. Я не уверен, есть ли еще какие-то неявные вызовы toString() ', которые нужно искать. – SpaceTrucker
Вы также можете отсканировать файлы '.class' и отладить информацию. Конкатенация строки выражения infix отображается на вызовы строковых построителей. – SpaceTrucker