Как полиморфизм может быть достигнут с помощью invokedynamic JDK7 - PullRequest
4 голосов
/ 18 октября 2011

Предположим, что я реализую динамически типизированный язык поверх JVM 7, который поддерживает инструкцию invokedynamic для связи методов во время выполнения.

Динамически типизированный язык имеет функцию add, которая работает нацелые числа, добавляя их и в строках, соединяя их.Теперь предположим, что add вызывается, скажем, универсальным методом обработки списка, который знает только (во время компиляции), что он содержит объекты, либо целые числа, либо строки, либо и то и другое.

Как может помочь invokedynamicмне здесь при компиляции метода в байт-код JVM, поскольку он должен отправлять две разные внутренние функции, а именно фактическую функцию, которая добавляет целые числа, и фактическую функцию, которая объединяет строки?

Ответы [ 3 ]

3 голосов
/ 18 октября 2011

Короче говоря, invokedynamic позволяет вам вызывать метод с заданной сигнатурой без знания класса, к которому принадлежит метод. Если ваш add() метод просто принимает Object (или другой общий базовый тип) в качестве аргумента, то вы можете иметь add(Object) методы во многих классах, не связанных между собой, и invokedynamic сможет их вызывать. Пока у целевого объекта есть метод, он будет вызываться.

2 голосов
/ 18 октября 2011
0 голосов
/ 19 октября 2011

Во время моего исследования я также нашел следующую ссылку, которой я хотел бы поделиться:

JSR 292 Cookbook

Это коллекция исходного кода, показывающаякак использовать JSR 292 для реализации обычных шаблонов, которые вы можете найти в динамических языковых средах исполнения.(Описание скопировано со страницы.)

...