Actualmente estoy trabajando con un lenguaje de programación especializado e interpretado implementado en Java. Como una parte muy pequeña del lenguaje, me gustaría agregar la capacidad de hacer llamadas a Java. Antes de sumergirme en todo lo esencial de la reflexión, me preguntaba si alguien sabía de una biblioteca general para hacer la parte de "back-end" de invocar el código de Java de forma reflexiva.¿Existe una biblioteca general "back-end" para la reflexión de Java
Es decir, analizo una cadena (defino la gramática) en una estructura de datos que representa una llamada al método Java (o constructor o acceso de campo) y luego transfiero esa estructura de datos a esta biblioteca que invoca la llamada y regresa el resultado. En particular, me gustaría que le permite manejar ya todos los casos extremos que no quiero averiguar:
- Automáticamente escoger el método correcto basado en los tipos de argumentos (como un Class.getDeclaredMethod inteligente ())
- distinción entre las matrices y la manija normal de objeto hace referencia a
- etc
me he pasado un poco de tiempo mirando las implementaciones de lenguajes dinámicos en la JVM, pero estos son generalmente mucho más complicado de lo Estoy buscando, o altamente optimizado para el partic lenguaje ular
Otra opción es convertir mi gramática en una cadena en un lenguaje dinámico e invocarlo con Rhino o algo así, pero eso es un poco más por encima de lo que estoy buscando.
Gracias!
Nope. Estoy buscando algo con un método como "invocación de objeto (objeto Object, String nameOfMethod, Object [] args)" que encuentra el método correcto (teniendo en cuenta la herencia y la conversión de tipo) y lo llama. Las secuencias de comandos de Java simplemente nos permiten evaluar cadenas en un lenguaje de scripts existente. –
Bueno, Java scripting hace algo más que permitirle invocar lenguajes de scripting desde Java, si no me equivoco, proporciona mecanismos para permitir que el código de scripting interactúe con objetos Java (referido como Binding en los documentos), que se ve muy similar a lo que estamos tratando de hacer – alex
... al menos, echar un vistazo a las implementaciones de scripts existentes debería ayudarlo – alex