Pregunta

Suponga que estoy implementando un lenguaje tipado dinámicamente en la parte superior del JVM 7, que admite el invokedynamic Instrucción para vincular los métodos en tiempo de ejecución.

El lenguaje tipado dinámicamente tiene una función add Eso funciona en enteros agregándolos y en cuerdas concatenándolos. Ahora suponga que add Se llama por un método de procesamiento de listas genéricas que solo sabe (en el tiempo de compilación) que contiene objetos, enteros o cadenas o ambas.

Como puede invokedynamic Ayúdame aquí al compilar el método a JVM Bytecode, ya que tiene que enviar a dos funciones internas diferentes, a saber, la función real que agrega enteros y la función real que concatena las cadenas.

¿Fue útil?

Solución

En breve, invokedynamic le permite invocar un método con una firma dada sin conocimiento de la clase a la que pertenece el método. Si tu add() El método solo toma un Object (u otro tipo de base común) como argumento, entonces puede tener add(Object) métodos en muchas clases no relacionadas, y invokedynamic podrá invocarlos. Mientras el objeto objetivo tenga el método, se llamará.

Otros consejos

Durante mi investigación también encontré el siguiente enlace, que me gustaría compartir:

Libro de cocina JSR 292

Es una colección de código fuente que muestra cómo usar JSR 292 para implementar patrones habituales que puede encontrar en los tiempos de ejecución de lenguaje dinámico. (Descripción copiada de su página).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top