Как можно достичь полиморфизма с помощью jdk7 inlokedynamic

StackOverflow https://stackoverflow.com/questions/7809772

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

JSR 292 Кулинарная книга

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top