¿Cómo se puede lograr el polimorfismo con la invokedynamic de JDK7?
-
26-10-2019 - |
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.
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
También puede mirar estos artículos relacionados:
Durante mi investigación también encontré el siguiente enlace, que me gustaría compartir:
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).