one-nio: компилируем Java на лету
В библиотеке one-nio есть возможность компилировать Java код на лету. Это может быть нужно, когда вы хотите дать пользователю возможность задавать формулы для вычисления значений. Как-то мне нужно было посчитать вес тасков для отдачи пользователям по сложной формуле, которая зависела от квалификации пользователя и типа таска. Я решил эту задачу используя встроенный в jvm движок Nashorn. Писал куски кода на Javascript, компилировал и запускал в программе.
Можно обойтись без Javascript, если писать и компилировать прямо Java код:
Можно писать в файле или в базе данных код функции:
String functionStr = "context.multiplier * 10";
Подставлять его в шаблон, расширяющий класс Scales
:
Итоговый экземпляр myScales
можно сохранять для повторного использования, чтобы сократить время вызова.
Также в context
можно передавать и другие параметры, кроме использованного мною multiplier
:
Я не проверял, но такой способ должен работать быстрее использования javascript движка, будет поддерживать jit оптимизации, в случае частого вызова метода, который был получен от пользователя и больше мне нравится.