Как можно достичь полиморфизма с помощью jdk7 inlokedynamic
-
26-10-2019 - |
Вопрос
Предположим, что я внедряю динамически напечатанный язык на вершине JVM 7, который поддерживает invokedynamic
инструкция по ссылке методов во время выполнения.
Динамически напечатанный язык имеет функцию add
Это работает на целых числах, добавляя их и на струны, объединяя их. Теперь предположим это add
называется, скажем, общим методом обработки списка, который знает только (во время компиляции), что он содержит объекты, либо целые числа, или строки, или и то, и другое.
Как может invokedynamic
Помогите мне здесь при составлении метода к байт -коду JVM, поскольку он должен отправлять на две разные внутренние функции, а именно фактическую функцию, которая добавляет целые числа и фактическую функцию, которая объединяет строки?
Решение
Короче говоря, invokedynamic
Позволяет вам вызвать метод с данной подписью без знания класса, которому принадлежит метод. Если твой add()
Метод просто принимает Object
(или другой общий базовый тип) в качестве аргумента, тогда вы можете иметь add(Object)
методы во многих других не связанных классах и invokedynamic
сможет призвать их. Пока целевой объект имеет метод, он будет вызван.
Другие советы
Вы также можете посмотреть на эти связанные статьи:
Во время моего исследования я также нашел следующую ссылку, которой я хотел бы поделиться:
Это сборник исходного кода, показывающий, как использовать JSR 292 для реализации обычных шаблонов, которые вы можете найти в динамическом языке. (Описание скопировано со своей страницы.)