Как получить конкретный объект статического метода через зеркальный API?
У меня есть что-то вроде этого:
class MyClass
{
static void DoSomething(arg1, arg2){...}
}
Благодаря отражению я могу получить ClassMirror этого класса. С этого момента, как мне добраться до конкретной статической функции, чтобы я мог ее вызвать.
Обратите внимание, что я пытался использовать:
ObjectMirror.invoke('DoSomething', [arg1, arg2]);
который изначально может работать, но он не поддерживает передачу сложных типов в качестве аргументов. Эта статическая функция требует наличия сложного типа в качестве одного из аргументов.
В идеале я хотел бы получить объект Function, представляющий статический метод, чтобы я мог вызвать его напрямую.
1 ответ
А. Нынешнее положение дел носит временный характер. Планируется, что зеркальный API закроет аргументы зеркалами для вас.
б. В конечном итоге API может поддерживать метод getProperty, который даст вам будущее для функционального объекта. Однако вы не получите объект Function напрямую, так что в этом случае это не будет иметь никакого значения.
с. Основная идея заключается в том, что API в основном работает с зеркалами. Чтобы сделать его более удобным, он должен принимать не-зеркала в качестве входных данных и оборачивать их в зеркала для вас. Он всегда возвращает зеркала, а в некоторых случаях возвращает фьючерсы на них. Это так, API работает одинаково для удаленных и локальных случаев.
д. Ресурсы для понимания зеркал:
- http://www.bracha.org/mirrors.pdf (академическая работа, жесткая работа)
- http://www.hpi.uni-potsdam.de/hirschfeld/events/past/media/100105_Bracha_2010_LinguisticReflectionViaMirrors_HPI.mp4 (видео, предшествующее Dart, обсуждает более ранние зеркальные системы)
- http://gbracha.blogspot.com/2010/03/through-looking-glass-darkly.html (мой старый постдартовый пост в блоге о зеркалах)
- http://www.wirfs-brock.com/allen/posts/228 (блог Аллена Вирс-Брока. Аллен был пионером зеркала в Smalltalk в 90-х годах)
- http://www.wirfs-brock.com/allen/posts/245
Вы также можете искать в моем блоге или в блоге Аллена Уирфа-Брока сообщения на эту тему.