Как стать автором
Обновить

Комментарии 16

Я читал ту вашу статью (спасибо за неё!), но как-то не соотнёс с этим вопросом.
Как вариант ещё Unsafe.allocateInstance.
Тоже не вызывает конструктор, причём безо всякой кодогенерации.
Является JVM интринсиком, то есть, инлайнится на «ура».
Да, будет, еще наверное можно через JNI. Но это требует «привелегий», а этот подход работает и так.
Хм, для чего это может понадобиться? Наверно конструктор отсутствует не просто так, проблема в архитектуре и лучше усовершенствовать ее, чем использовать данный костыль?
Я это сделал just for fun. Практического применения я не вижу, ну кроме каких-то сильно запущенных случаев исправления косяков в сторонних библиотеках для которых нет исходников.
Write once, fun anywhere?
Кастомная десериализация, например.
Persistence, RPC и всё остальное, где нужно преобразовывать/восстанавливать объекты.
Разве в java нет штатных способов для этого?
Штатные есть. Хороших нет.
Стандартная сериализация 1) медленная, 2) неэкономная, 3) не справляется с эволюцией классов.
Для внутреннего использования — да подойдет. Как библиотека для широго использования — не очень, т.к. гарантированно будет работать только на Oracle JVM. А на какой нибудь IBM, IKVM, Dalvik это не взлетит.

Инструментализация байткода более надежный способ.
Рад, что вы воспользовались моим предложением попробовать :-) Очередное подтверждение того, что нельзя никому верить на слово :-)
Фактически использование того факта, что ява не вызывает контруктор при десериализации. А можно ли таким способом создать Enum?
Про взлом Enum'ов такое читал (не проверял код в статье).
Хороший вопрос. Надо проверить: как будет вести себя конструктор java.lang.Enum и что делать с инициализацией полей, особенно в случае с final.
Как будет время поэксперементирую и если что накопаю выложу на bitbucket
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации