Я ищу инструмент управления байт-кодом высокого уровня, такой как Javassist, но который понимает некоторые особенности Scala. Инструменты управления байт-кодом нижнего уровня должны быть относительно агностическими, но для моих случаев использования что-то на уровне Javassist намного лучше. Однако инструмент на этом уровне должен знать об исходном языке и его байткоде. Что-то подобное существует для Scala? До сих пор я мог использовать Javassist со Scala для очень простых вещей, но я был укушен некоторыми различиями Scala/Java для нескольких других вещей.Есть ли Scala осведомленный инструмент манипулирования байт-кода высокого уровня, такой как Javassist?
ответ
Я не думаю, что такой инструмент существует (пока). Нынешняя ситуация заключается в том, что вы не можете смешивать единицы компиляции, скомпилированные с различными версиями Scala, то есть класс, скомпилированный с Scala 2.9, не будет взаимодействовать с классом, составленным с помощью Scala 2.10.
Когда вы используете Scala 2.10, вы можете использовать Scala reflection и Scala macros для достижения аналогичных целей, как при модификации байт-кода. Для меня это выглядит как самый лучший способ доказательства.
Один из ваших вопросов, направленных на добавление идентификатора серийной версии. Это должно быть возможно с помощью макросов Scala. С помощью макросов Scala можно даже управлять идентификаторами серийной версии во внешней базе данных в соответствии с изменениями API.
Какие задачи вы пытаетесь предпринять? – Antimony
Одна проблема, с которой я столкнулся, описан [здесь] (http://stackoverflow.com/questions/17385725/how-to-add-a-serialversionuid-to-a-class-instance-in-scala) и [здесь] (http://stackoverflow.com/questions/17384913/can-scala-2-10-reflection-emulate-this-javassist-functionality) –