InvokeDynamic - как получить доступ к аргументам в методе начальной загрузки? - PullRequest
4 голосов
/ 27 ноября 2011

Я пытаюсь реализовать "типизацию утки" с invokedynamic в JVM7. Я создал два разных класса, у каждого из них есть метод greet(), который возвращает String. Я случайным образом выбираю один из них, сохраняю экземпляр в стеке и вызываю invokedynamic (используя ASM).

Интересно, смогу ли я получить доступ к аргументам в методе начальной загрузки. Потому что я не могу вернуть соответствующий CallSite с target, не зная, какой объект находится в стеке и какой из greet() методов должен быть возвращен.

Если мой подход неверен, каков правильный подход?

1 Ответ

2 голосов
/ 28 ноября 2011

Я отвечу сам.

  1. Привязка CallSite с помощью вашего собственного статического метода (например, lookup(CallSite cs, Object[] args)
  2. args[0] - получатель, остальныеявляются аргументами. Делайте все, что вы хотите в методе поиска.

Если вы заинтересованы в Inline Caching (я был), взгляните на эти две ссылки:

...