Я хочу вернуться к своему старому вопросу о «компиляции» классов в памяти. Поскольку прошло около 1/2 года с тех пор, как я спросил (и получил несколько ответов), я хотел бы повторно поднять вопрос и посмотреть, не появится ли что-то новое (поэтому нет, я не считаю это дубликатом) .
Старый вопрос можно найти здесь: Оперативная компиляция Java-кода в памяти для Java 5 и Java 6 – советую прочитать ее (и ответы) перед ответом на этот вопрос.
Я вполне доволен тем, что beanshell выполняет тяжелую работу по оценке строки класса java для фактического объекта класса. Тем не менее, beanshell уже давно стоит на версии 2.0b4, и его ограничения (без конструктора, даже по умолчанию; без дженериков, без for-each, без перечислений...) раздражают.
Напоминание: это должно использоваться в качестве интерфейса отладки, поэтому соображения производительности незначительны. Тем не менее, я не могу перезапускать сервер, не могу отправлять файлы классов в местоположение, и JSP - очень плохой выбор для меня (я не буду здесь вдаваться в причины). Кроме того, конечный продукт должен быть классом (или объектом этого класса), чтобы я мог передавать его.
Некоторые ограничения: у меня не может быть JDK, поэтому нет javax.tools.JavaCompiler. У меня не может быть JSP, так как у меня нет tomcat или другого «настоящего» веб-контейнера. Поддержка синтаксиса Java 5 была бы отличной, особенно дженерики, перечисления и параметризация. Поддержка конструкторов по умолчанию была бы очень кстати.
Любые идеи?
Редактировать 1: я только что узнал, что существует обходной способ иметь конструкторы в beanshell, однако вы должны объявить их "public void XXX(){...}" вместо обычного способа "public XXX(){ ...}".