Potrzebuję w jakiś sposób oznaczyć pewne funkcje Clojure jako "specjalne", aby kod Java mógł je rozpoznać jako takie za pomocą odbicia. Próbowałem dodać adnotację do funkcji, ale najwyraźniej to nie jest obsługiwane. Próbowałem do reify
interfejsu rozszerzającego IFn
(tak, aby kod Java mógł rozpoznać obiekt funkcji), ale to nie jest dobre, ponieważ Clojure nie używa bezpośrednio reifikowanej metody jako kod implementujący invoke
, ale raczej pośrednie wywołanie do Afunction
obiekt, który faktycznie implementuje metodę (muszę oznaczyć rzeczywistą metodę invoke
z faktycznym kodem funkcji).Jak oznaczyć funkcję Clojure tak, aby móc ją rozpoznać po odbiciu Java
Wszelkie pomysły?
EDYCJA: nawet tagowanie w sposób, w jaki można uzyskać dostęp z biblioteki ASM (zamiast regularnego odbicia) byłoby w porządku, ale muszę jakoś oznaczyć rzeczywisty obiekt AFunction
lub metodę invoke
. Ponadto nie mogę uzyskać dostępu do rzeczywistego obiektu AFunction
- potrzebuję tagu, aby był widoczny na klasie.
Dzięki! Niestety, nie mam nawet dostępu do samego obiektu IFn - tylko do jego klasy. Muszę jakoś oznaczyć klasę (nie muszę nawet dołączać żadnych konkretnych informacji, tylko sposób, aby ustalić, czy klasa jest "zaznaczona" w jakiś sposób). Pomyślałem o oznaczeniu go za pomocą metody invoke, która określa, że generuje dobrze znany sprawdzony wyjątek, ale nie ma sposobu, aby to zrobić z Clojure. – pron
Czy możesz podać przykładowy kod clojure i java, aby pokazać, w jaki sposób klasa z clojure jest tworzona i dostępna z poziomu Javy, co sprawiłoby, że pytanie byłoby bardziej zrozumiałe. – Ankur
Używam narzędzia JavaAgent do obsługi niektórych klas. Otrzymuję powiadomienie o załadowaniu nowej klasy. Chciałbym w jakiś sposób oznaczyć funkcję Clojure tak, że będę wiedział, czy wymaga to oprzyrządowania. – pron